table(dataAll$Session, dataAll$Drug)
MPH PBO SUL
1 31 37 22
2 28 29 33
3 31 24 35
# turn drug conditions into factor levels
dataAll$Drug <- factor(dataAll$Drug, levels = c("MPH","SUL","PBO"));
dataAll$PutamenSplit <- factor(dataAll$PutamenSplit, levels = c("0","1"));
dataAll$CaudateSplit <- factor(dataAll$CaudateSplit, levels = c("0","1"));
dataAll$VSSplit <- factor(dataAll$VSSplit, levels = c("0","1"));
dataAll$DifEnd_Total <- dataAll$DifferentEnd/dataAll$Total # divide different end scores by total number of ideas
dataAll$DifEnd_Con <- dataAll$DifferentEnd/dataAll$Convergent_Pasta # divide different end scores by total number of ideas
# set contrasts to sum-to-zero
options(contrasts=c("contr.sum", "contr.poly"))
# set two dataframes for the contrast between MPH and PBO - between SUL and PBO
df_MPH <- dplyr::filter(dataAll, Drug %in% c("MPH","PBO"))
df_SUL <- dplyr::filter(dataAll, Drug %in% c("SUL","PBO"))
data_PBO <- dplyr::filter(dataAll, Drug %in% c("PBO"))
print(summary(Placebo_PASTA_DE_Caudate), corr=F) # print summary without fixed effect correlation matrix
Call:
lm(formula = DifferentEnd ~ 1 + Caudate_ki.c, data = data_PBO,
REML = F)
Residuals:
Min 1Q Median 3Q Max
-5.8421 -1.8324 -0.2242 1.5334 6.9476
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.6444 0.2932 26.076 <2e-16 ***
Caudate_ki.c -0.3340 0.2948 -1.133 0.26
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.781 on 88 degrees of freedom
Multiple R-squared: 0.01438, Adjusted R-squared: 0.003176
F-statistic: 1.284 on 1 and 88 DF, p-value: 0.2603
print(summary(Placebo_PASTA_DE_VS), corr=F) # print summary without fixed effect correlation matrix
Call:
lm(formula = DifferentEnd ~ 1 + VS_ki.c, data = data_PBO, REML = F)
Residuals:
Min 1Q Median 3Q Max
-6.1984 -1.7955 -0.1105 1.4734 7.0567
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.6444 0.2931 26.081 <2e-16 ***
VS_ki.c -0.3388 0.2947 -1.149 0.253
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.781 on 88 degrees of freedom
Multiple R-squared: 0.01479, Adjusted R-squared: 0.003597
F-statistic: 1.321 on 1 and 88 DF, p-value: 0.2535
print(summary(Placebo_PASTA_DE_Putamen), corr=F) # print summary without fixed effect correlation matrix
Call:
lm(formula = DifferentEnd ~ 1 + Putamen_ki.c, data = data_PBO,
REML = F)
Residuals:
Min 1Q Median 3Q Max
-5.907 -1.685 -0.222 1.583 7.296
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.6444 0.2902 26.340 <2e-16 ***
Putamen_ki.c -0.5142 0.2918 -1.762 0.0816 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.753 on 88 degrees of freedom
Multiple R-squared: 0.03407, Adjusted R-squared: 0.0231
F-statistic: 3.104 on 1 and 88 DF, p-value: 0.08157
##################### SUL #####################################################
##################### SUL #####################################################
##################### SUL #####################################################
##################### SUL #####################################################
##################### SUL #####################################################
SUL_Caudate_RAT <- lmer(Convergent_RAT ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_SUL, REML=F)
print(summary(SUL_Caudate_RAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
Data: df_SUL
AIC BIC logLik deviance df.resid
682.0 704.4 -334.0 668.0 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.33866 -0.61144 -0.09998 0.54320 2.60092
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.2652 0.515
Residual 2.1444 1.464
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 4.42458 0.30755 164.74835 14.387 <2e-16 ***
Drug1 0.15409 0.11104 90.69284 1.388 0.1686
Caudate_ki.c -0.03719 0.12278 89.75565 -0.303 0.7626
Session 0.27938 0.14118 138.33452 1.979 0.0498 *
Drug1:Caudate_ki.c 0.02673 0.10984 89.35964 0.243 0.8083
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(SUL_Caudate_RAT, type = "pred", terms = c("Caudate_ki.c","Session","Drug"))
Error in plot_model(SUL_Caudate_RAT, type = "pred", terms = c("Caudate_ki.c", :
could not find function "plot_model"




##################### MPH #####################################################
##################### MPH #####################################################
##################### MPH #####################################################
##################### MPH #####################################################
##################### MPH #####################################################
##################### RAT #####################################################
# MPH*Caudate interaction in predicting Convergent RAT
MPH_Caudate_RAT <- lmer(Convergent_RAT ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_Caudate_RAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
699.2 721.6 -342.6 685.2 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.25533 -0.59926 -0.01159 0.62992 2.13551
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.4705 0.6859
Residual 2.2064 1.4854
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 4.42327 0.30110 161.40947 14.690 <2e-16 ***
Drug1 0.04512 0.11118 90.09481 0.406 0.686
Caudate_ki.c -0.11355 0.13309 90.10202 -0.853 0.396
Session 0.22136 0.14032 125.40200 1.577 0.117
Drug1:Caudate_ki.c -0.05078 0.11165 90.01252 -0.455 0.650
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_Caudate_RAT, type = "pred", terms = c("Caudate_ki.c","Session","Drug"))

plot(MPH_Caudate_RAT)

qqnorm(residuals(MPH_Caudate_RAT))

# MPH*Putamen interaction in predicting Convergent RAT
MPH_Putamen_RAT <- lmer(Convergent_RAT ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_Putamen_RAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
700.0 722.4 -343.0 686.0 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.23723 -0.56564 0.01528 0.64409 2.14803
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.4789 0.6921
Residual 2.2107 1.4868
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 4.408e+00 3.046e-01 1.615e+02 14.472 <2e-16 ***
Drug1 4.457e-02 1.113e-01 9.012e+01 0.400 0.690
Putamen_ki.c -5.166e-02 1.335e-01 9.008e+01 -0.387 0.700
Session 2.291e-01 1.422e-01 1.263e+02 1.611 0.110
Drug1:Putamen_ki.c -6.206e-04 1.131e-01 9.079e+01 -0.005 0.996
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_Putamen_RAT, type = "pred", terms = c("Putamen_ki.c","Session","Drug"))

plot(MPH_Putamen_RAT)

qqnorm(residuals(MPH_Putamen_RAT))

# Sulpiride*VS interaction in predicting Convergent RAT
MPH_VS_RAT <- lmer(Convergent_RAT ~ 1 + Drug*VS_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_VS_RAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + Drug * VS_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
700.1 722.5 -343.1 686.1 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.25335 -0.57046 0.01357 0.63473 2.18173
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.4812 0.6937
Residual 2.2104 1.4868
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 4.404675 0.304727 161.193156 14.454 <2e-16 ***
Drug1 0.044427 0.111291 90.117143 0.399 0.691
VS_ki.c -0.024468 0.133742 90.366488 -0.183 0.855
Session 0.231004 0.142280 125.810262 1.624 0.107
Drug1:VS_ki.c 0.005332 0.113054 90.738007 0.047 0.962
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_VS_RAT, type = "pred", terms = c("VS_ki.c","Session","Drug"))

plot(MPH_VS_RAT)

qqnorm(residuals(MPH_VS_RAT))

##################### AUT #####################################################
# MPH*Caudate interaction in predicting divergent AUT
MPH_Caudate_AUT <- lmer(AUT_divergent ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_Caudate_AUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
368.5 390.8 -177.2 354.5 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.00602 -0.47336 -0.00095 0.51974 2.24790
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.4739 0.6884
Residual 0.1590 0.3988
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 4.579e-02 1.107e-01 1.797e+02 0.414 0.680
Drug1 5.518e-02 2.987e-02 9.004e+01 1.847 0.068 .
Caudate_ki.c 2.057e-02 7.887e-02 9.004e+01 0.261 0.795
Session 5.515e-03 4.052e-02 9.755e+01 0.136 0.892
Drug1:Caudate_ki.c 4.754e-02 2.999e-02 9.002e+01 1.585 0.116
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_Caudate_AUT, type = "pred", terms = c("Caudate_ki.c","Session","Drug"))

plot(MPH_Caudate_AUT)

qqnorm(residuals(MPH_Caudate_AUT))

# MPH*Putamen interaction in predicting divergent AUT
MPH_Putamen_AUT <- lmer(AUT_divergent ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_Putamen_AUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
370.7 393.1 -178.4 356.7 173
Scaled residuals:
Min 1Q Median 3Q Max
-1.9656 -0.5025 -0.0477 0.6113 2.2598
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.4712 0.6864
Residual 0.1633 0.4041
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 5.033e-02 1.122e-01 1.799e+02 0.449 0.6541
Drug1 5.535e-02 3.027e-02 9.005e+01 1.829 0.0707 .
Putamen_ki.c 3.139e-02 7.883e-02 9.003e+01 0.398 0.6914
Session 3.157e-03 4.162e-02 9.800e+01 0.076 0.9397
Drug1:Putamen_ki.c 1.148e-02 3.082e-02 9.023e+01 0.372 0.7105
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_Putamen_AUT, type = "pred", terms = c("Putamen_ki.c","Session","Drug"))

plot(MPH_Putamen_AUT)

qqnorm(residuals(MPH_Putamen_AUT))

# MPH*VS interaction in predicting divergent AUT
MPH_VS_AUT <- lmer(AUT_divergent ~ 1 + Drug*VS_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_VS_AUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + Drug * VS_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
367.1 389.4 -176.5 353.1 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.0657 -0.4976 -0.0212 0.4985 2.2960
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.4719 0.6870
Residual 0.1574 0.3967
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 0.02800 0.11102 179.79119 0.252 0.8012
Drug1 0.05451 0.02972 90.04447 1.835 0.0699 .
VS_ki.c 0.06058 0.07869 90.11340 0.770 0.4434
Session 0.01474 0.04087 97.64910 0.361 0.7191
Drug1:VS_ki.c 0.05614 0.03023 90.21370 1.857 0.0666 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_VS_AUT, type = "pred", terms = c("VS_ki.c","Session","Drug"))

plot(MPH_VS_AUT)

qqnorm(residuals(MPH_VS_AUT))



print(summary(MPH_VS_PastDif), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: DifferentEnd ~ 1 + Drug * VS_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
884.6 907.0 -435.3 870.6 173
Scaled residuals:
Min 1Q Median 3Q Max
-1.92989 -0.56982 0.01076 0.51494 2.57408
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 4.248 2.061
Residual 4.269 2.066
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 8.18896 0.48011 168.67778 17.056 <2e-16 ***
Drug1 0.21825 0.15472 90.06895 1.411 0.162
VS_ki.c -0.05445 0.26803 90.21373 -0.203 0.839
Session -0.17583 0.20723 107.73944 -0.848 0.398
Drug1:VS_ki.c 0.27050 0.15733 90.42631 1.719 0.089 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Session1 <- dataAll[grep("1", dataAll$Session),]
ggscatter(Session1, x = "Caudate_ki", y = "KDOCStotal",
add = "reg.line", conf.int = TRUE,
cor.coef = TRUE, cor.method = "pearson",
xlab = "CaudateKi)", ylab = "SubjectiveCreativity")

ggscatter(Session1, x = "Putamen_ki", y = "KDOCStotal",
add = "reg.line", conf.int = TRUE,
cor.coef = TRUE, cor.method = "pearson",
xlab = "CaudateKi)", ylab = "SubjectiveCreativity")

ggscatter(Session1, x = "VS_ki", y = "KDOCStotal",
add = "reg.line", conf.int = TRUE,
cor.coef = TRUE, cor.method = "pearson",
xlab = "CaudateKi)", ylab = "SubjectiveCreativity")

NA
NA
# Ecological validity
ConCr <- lmer(Convergent_Pasta ~ 1 + KDOCStotal + Session + (1 | ID), data = dataAll, REML=F)
print(summary(ConCr), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_Pasta ~ 1 + KDOCStotal + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
2064.6 2082.6 -1027.3 2054.6 265
Scaled residuals:
Min 1Q Median 3Q Max
-3.3462 -0.4448 -0.0436 0.4098 5.6155
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 176.73 13.29
Residual 53.15 7.29
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 22.1557 10.1823 92.0799 2.176 0.0321 *
KDOCStotal -1.5530 3.3546 90.0000 -0.463 0.6445
Session 2.6667 0.5434 180.0000 4.908 2.06e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
DivArt <- lmer(Divergent_Pasta ~ 1 + KDOCStotal + Session + (1 | ID), data = dataAll, REML=F)
print(summary(DivArt), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Divergent_Pasta ~ 1 + KDOCStotal + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
1791.9 1809.9 -891.0 1781.9 265
Scaled residuals:
Min 1Q Median 3Q Max
-2.1612 -0.5627 -0.1337 0.4537 3.4865
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 31.93 5.650
Residual 25.62 5.061
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -3.9329 4.6797 94.8342 -0.840 0.40279
KDOCStotal 5.1473 1.5303 90.0000 3.364 0.00113 **
Session -0.5389 0.3772 180.0000 -1.428 0.15489
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
DifEnd <- lmer(DifferentEnd ~ 1 + KDOCStotal + Session + (1 | ID), data = dataAll, REML=F)
print(summary(DifEnd), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: DifferentEnd ~ 1 + KDOCStotal + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
1303.5 1321.5 -646.7 1293.5 265
Scaled residuals:
Min 1Q Median 3Q Max
-2.20137 -0.60390 -0.02339 0.60521 2.70988
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 3.185 1.785
Residual 4.918 2.218
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 3.6550 1.6286 97.8120 2.244 0.0271 *
KDOCStotal 1.5358 0.5284 90.0000 2.906 0.0046 **
Session -0.2278 0.1653 180.0000 -1.378 0.1699
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ConCr <- lmer(Convergent_RAT ~ 1 + KDOCStotal + Session + (1 | ID), data = dataAll, REML=F)
print(summary(ConCr), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + KDOCStotal + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
1025.2 1043.2 -507.6 1015.2 265
Scaled residuals:
Min 1Q Median 3Q Max
-2.41132 -0.54539 0.01383 0.59204 2.58679
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.3869 0.622
Residual 2.1815 1.477
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 4.36595 0.79732 105.11399 5.476 2.99e-07 ***
KDOCStotal 0.09079 0.25392 90.00000 0.358 0.722
Session 0.16111 0.11009 180.00000 1.463 0.145
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ConCr <- lmer(AUT_divergent ~ 1 + KDOCStotal + Session + (1 | ID), data = dataAll, REML=F)
print(summary(ConCr), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + KDOCStotal + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
494.3 512.3 -242.2 484.3 265
Scaled residuals:
Min 1Q Median 3Q Max
-2.25337 -0.50593 -0.04141 0.52584 2.91320
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.3856 0.621
Residual 0.1806 0.425
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -1.391632 0.488905 93.086240 -2.846 0.00544 **
KDOCStotal 0.468811 0.160632 89.999988 2.919 0.00444 **
Session 0.001846 0.031674 180.000003 0.058 0.95360
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
## criterion validity
ConDivPasta <- lmer(Convergent_Pasta ~ 1 + Divergent_Pasta + Session + (1 | ID), data = dataAll, REML=F)
print(summary(ConDivPasta), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_Pasta ~ 1 + Divergent_Pasta + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
2033.7 2051.7 -1011.9 2023.7 265
Scaled residuals:
Min 1Q Median 3Q Max
-3.1062 -0.4322 -0.0288 0.3897 5.1241
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 174.96 13.23
Residual 45.29 6.73
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 23.48101 2.04408 222.87401 11.487 < 2e-16 ***
Divergent_Pasta -0.52133 0.09003 242.49652 -5.791 2.16e-08 ***
Session 2.38573 0.50394 180.39468 4.734 4.43e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ConDifPasta <- lmer(Convergent_Pasta ~ 1 + DifferentEnd + Session + (1 | ID), data = dataAll, REML=F)
print(summary(ConDifPasta), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_Pasta ~ 1 + DifferentEnd + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
2047.3 2065.3 -1018.7 2037.3 265
Scaled residuals:
Min 1Q Median 3Q Max
-3.3542 -0.4773 -0.0304 0.4272 5.5473
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 163.85 12.80
Residual 50.12 7.08
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 25.2852 2.5429 267.6428 9.944 < 2e-16 ***
DifferentEnd -0.9425 0.2220 227.1239 -4.246 3.18e-05 ***
Session 2.4520 0.5301 179.7783 4.626 7.12e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
## construct validity
ConDifRAT <- lmer(Convergent_RAT ~ 1 + DifferentEnd + Session + (1 | ID), data = dataAll, REML=F)
print(summary(ConDifRAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + DifferentEnd + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
1017.1 1035.1 -503.6 1007.1 265
Scaled residuals:
Min 1Q Median 3Q Max
-2.59175 -0.55540 -0.00063 0.60047 2.57462
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.3507 0.5922
Residual 2.1353 1.4613
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 5.45017 0.37158 267.19265 14.668 < 2e-16 ***
DifferentEnd -0.09867 0.03407 233.80181 -2.896 0.00413 **
Session 0.13864 0.10919 180.94311 1.270 0.20585
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ConPastaRAT <- lmer(Convergent_RAT ~ 1 + Convergent_Pasta + Session + (1 | ID), data = dataAll, REML=F)
print(summary(ConPastaRAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + Convergent_Pasta + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
1022.2 1040.2 -506.1 1012.2 265
Scaled residuals:
Min 1Q Median 3Q Max
-2.39512 -0.55240 -0.00362 0.58350 2.69559
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.3728 0.6106
Residual 2.1641 1.4711
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 4.418e+00 2.743e-01 2.697e+02 16.104 <2e-16 ***
Convergent_Pasta 1.252e-02 6.992e-03 1.410e+02 1.790 0.0755 .
Session 1.277e-01 1.112e-01 1.879e+02 1.148 0.2523
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
DivPastaAUT <- lmer(AUT_divergent ~ 1 + Divergent_Pasta + Session + (1 | ID), data = dataAll, REML=F)
print(summary(DivPastaAUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + Divergent_Pasta + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
487.9 505.9 -239.0 477.9 265
Scaled residuals:
Min 1Q Median 3Q Max
-2.19854 -0.50547 -0.08302 0.51198 2.71362
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.4273 0.6537
Residual 0.1674 0.4092
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -0.225507 0.112783 243.280533 -1.999 0.046668 *
Divergent_Pasta 0.020438 0.005269 258.820938 3.879 0.000133 ***
Session 0.012859 0.030631 180.499758 0.420 0.675125
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
DifPastaAUT <- lmer(AUT_divergent ~ 1 + DifferentEnd + Session + (1 | ID), data = dataAll, REML=F)
print(summary(DifPastaAUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + DifferentEnd + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
500.1 518.1 -245.1 490.1 265
Scaled residuals:
Min 1Q Median 3Q Max
-2.17369 -0.49164 -0.04547 0.50380 2.86086
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.4273 0.6537
Residual 0.1785 0.4225
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -0.156433 0.144270 269.655448 -1.084 0.279
DifferentEnd 0.019982 0.012979 239.260058 1.540 0.125
Session 0.006397 0.031626 180.512518 0.202 0.840
ConDivRATAUT <- lmer(Convergent_RAT ~ 1 + AUT_divergent + Session + (1 | ID), data = dataAll, REML=F)
print(summary(ConDivRATAUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + AUT_divergent + Session + (1 | ID)
Data: dataAll
AIC BIC logLik deviance df.resid
1022.4 1040.4 -506.2 1012.4 265
Scaled residuals:
Min 1Q Median 3Q Max
-2.3473 -0.5412 0.0284 0.5366 2.5965
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.3973 0.6303
Residual 2.1485 1.4658
Number of obs: 270, groups: ID, 90
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 4.6351 0.2452 251.4018 18.904 <2e-16 ***
AUT_divergent 0.2317 0.1354 159.7671 1.712 0.0888 .
Session 0.1607 0.1093 179.3515 1.471 0.1431
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
if (!require(remotes)) {
install.packages("remotes")
}
Loading required package: remotes
remotes::install_github('jorvlan/raincloudplots')
Downloading GitHub repo jorvlan/raincloudplots@HEAD
These packages have more recent versions available.
It is recommended to update all of them.
Which would you like to update?
1: All
2: CRAN packages only
3: None
4: cli (3.4.1 -> 3.6.0) [CRAN]
5: utf8 (1.2.2 -> 1.2.3) [CRAN]
6: fansi (1.0.3 -> 1.0.4) [CRAN]
7: colorspace (2.0-3 -> 2.1-0) [CRAN]
8: isoband (0.2.6 -> 0.2.7) [CRAN]
9: ggplot2 (3.4.0 -> 3.4.1) [CRAN]
10: gghalves (0.1.3 -> 0.1.4) [CRAN]
1
cli (3.4.1 -> 3.6.0) [CRAN]
utf8 (1.2.2 -> 1.2.3) [CRAN]
fansi (1.0.3 -> 1.0.4) [CRAN]
colorspace (2.0-3 -> 2.1-0) [CRAN]
isoband (0.2.6 -> 0.2.7) [CRAN]
ggplot2 (3.4.0 -> 3.4.1) [CRAN]
gghalves (0.1.3 -> 0.1.4) [CRAN]
Installing 7 packages: cli, utf8, fansi, colorspace, isoband, ggplot2, gghalves
trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/cli_3.6.0.tgz'
Content type 'application/x-gzip' length 1329603 bytes (1.3 MB)
==================================================
downloaded 1.3 MB
trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/utf8_1.2.3.tgz'
Content type 'application/x-gzip' length 196823 bytes (192 KB)
==================================================
downloaded 192 KB
trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/fansi_1.0.4.tgz'
Content type 'application/x-gzip' length 364195 bytes (355 KB)
==================================================
downloaded 355 KB
trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/colorspace_2.1-0.tgz'
Content type 'application/x-gzip' length 2621598 bytes (2.5 MB)
==================================================
downloaded 2.5 MB
trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/isoband_0.2.7.tgz'
Content type 'application/x-gzip' length 1869775 bytes (1.8 MB)
==================================================
downloaded 1.8 MB
trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/ggplot2_3.4.1.tgz'
Content type 'application/x-gzip' length 4222110 bytes (4.0 MB)
==================================================
downloaded 4.0 MB
trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/gghalves_0.1.4.tgz'
Content type 'application/x-gzip' length 230947 bytes (225 KB)
==================================================
downloaded 225 KB
The downloaded binary packages are in
/var/folders/q1/3b7vx_bx4cx1q8w19vj870ym0000gp/T//RtmpC4vn3s/downloaded_packages
── R CMD build ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
checking for file ‘/private/var/folders/q1/3b7vx_bx4cx1q8w19vj870ym0000gp/T/RtmpC4vn3s/remotesb824b759ab/jorvlan-raincloudplots-e5530fc/DESCRIPTION’ ...
✔ checking for file ‘/private/var/folders/q1/3b7vx_bx4cx1q8w19vj870ym0000gp/T/RtmpC4vn3s/remotesb824b759ab/jorvlan-raincloudplots-e5530fc/DESCRIPTION’ (435ms)
─ preparing ‘raincloudplots’:
✔ checking DESCRIPTION meta-information
─ checking for LF line-endings in source and make files and shell scripts
─ checking for empty or unneeded directories
Omitted ‘LazyData’ from DESCRIPTION
─ building ‘raincloudplots_0.2.0.tar.gz’
* installing *source* package ‘raincloudplots’ ...
** using staged installation
** R
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
** testing if installed package can be loaded from final location
** testing if installed package keeps a record of temporary installation path
* DONE (raincloudplots)
library(raincloudplots)

dataSkipped <- lmer(SkippedItems ~ 1 + Session + (1 | subject), data = dataSkippedRAT, REML=F)
print(summary(dataSkipped), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: SkippedItems ~ 1 + Session + (1 | subject)
Data: dataSkippedRAT
AIC BIC logLik deviance df.resid
1063.9 1078.6 -528.0 1055.9 284
Scaled residuals:
Min 1Q Median 3Q Max
-2.0238 -0.5618 -0.2190 0.3190 5.7249
Random effects:
Groups Name Variance Std.Dev.
subject (Intercept) 0.5212 0.722
Residual 1.8702 1.368
Number of obs: 288, groups: subject, 96
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 1.05903 0.22558 275.82981 4.695 4.21e-06 ***
Session 0.03646 0.09869 192.00000 0.369 0.712
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


M = cor(newdata,use="pairwise.complete.obs")
testRes = cor.mtest(newdata, conf.level = 0.95)
corrplot(M, method = 'number') # colorful number
## leave blank on non-significant coefficient
## add significant correlation coefficients
corrplot(M, p.mat = testRes$p, method = 'circle', type = 'lower', insig='blank',
addCoef.col ='black', number.cex = 0.8, diag=FALSE)
M = cor(Avdata,use="pairwise.complete.obs")
testRes = cor.mtest(Avdata, conf.level = 0.95)
corrplot(M, method = 'number') # colorful number

## leave blank on non-significant coefficient
## add significant correlation coefficients
corrplot(M, p.mat = testRes$p, method = 'circle', type = 'lower', insig='blank',
addCoef.col ='black', number.cex = 0.8, diag=FALSE)

data_MPH <- dplyr::filter(dataAll, Drug %in% c("MPH"))
data_MPH <- data_MPH[order(data_MPH$ID),]
data_SUL <- dplyr::filter(dataAll, Drug %in% c("SUL"))
data_SUL <- data_SUL[order(data_SUL$ID),]
data_PBO <- dplyr::filter(dataAll, Drug %in% c("PBO"))
data_PBO <- data_PBO[order(data_PBO$ID),]
df_Correlations <- data.frame(matrix(ncol = 8, nrow = 93))
x <- c("ID", "MPH_PBO_Redo_Av", "MPH_PBO_IP_Av","MPH_PBO_AUT_divergent","MPH_PBO_Divergent_Pasta","MPH_PBO_DifferentEnd","MPH_PBO_Convergent_RAT","MPH_PBO_Convergent_PASTA")
colnames(df_Correlations) <- x
df_Correlations$ID <- data_MPH$ID
Error in `$<-.data.frame`(`*tmp*`, ID, value = c(1L, 2L, 3L, 4L, 5L, 6L, :
replacement has 90 rows, data has 93
# Total number of ideas in PASTA
MPH_Caudate_Total <- lmer(Total ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Caudate_Total), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: Total ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
1428.8 1451.2 -707.4 1414.8 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.7057 -0.4753 -0.0043 0.3759 3.5178
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 176.4 13.281
Residual 56.3 7.504
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 30.4527 2.1064 14.457
Drug1 1.3418 0.5620 2.388
Caudate_ki.c -0.4490 1.5163 -0.296
Session 1.5750 0.7631 2.064
Drug1:Caudate_ki.c 0.9871 0.5643 1.749
MPH_Putamen_Total <- lmer(Total ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Putamen_Total), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: Total ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
1431.6 1453.9 -708.8 1417.6 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.7177 -0.4466 0.0032 0.3182 3.5506
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 175.69 13.255
Residual 57.99 7.615
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 30.4948 2.1366 14.273
Drug1 1.3434 0.5704 2.355
Putamen_ki.c -0.1509 1.5168 -0.099
Session 1.5532 0.7851 1.978
Drug1:Putamen_ki.c 0.3515 0.5808 0.605
MPH_VS_Total <- lmer(Total ~ 1 + Drug*VS_ki + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_VS_Total), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: Total ~ 1 + Drug * VS_ki + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
1427.1 1449.4 -706.5 1413.1 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.7614 -0.4458 -0.0326 0.3456 3.6077
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 173.78 13.183
Residual 55.97 7.482
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 16.5193 11.5621 1.429
Drug1 -6.7121 4.3339 -1.549
VS_ki 933.6037 778.5386 1.199
Session 1.7573 0.7712 2.279
Drug1:VS_ki 552.7085 294.7144 1.875
## Convergent PASTA corrected for Total number of ideas
MPH_Caudate_ConTotal <- lmer(Con_Total ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Caudate_ConTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: Con_Total ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
-49.1 -26.8 31.6 -63.1 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.0418 -0.5060 0.1013 0.5229 2.1592
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.03552 0.1885
Residual 0.01890 0.1375
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 0.596737 0.034807 17.144
Drug1 -0.011848 0.010295 -1.151
Caudate_ki.c 0.013756 0.022486 0.612
Session 0.033278 0.013840 2.405
Drug1:Caudate_ki.c 0.006939 0.010337 0.671
MPH_Putamen_ConTotal <- lmer(Con_Total ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Putamen_ConTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: Con_Total ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
-48.6 -26.3 31.3 -62.6 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.05005 -0.47652 0.08736 0.53785 2.16547
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.03556 0.1886
Residual 0.01898 0.1378
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 0.59940 0.03515 17.054
Drug1 -0.01175 0.01032 -1.139
Putamen_ki.c 0.01111 0.02250 0.494
Session 0.03190 0.01406 2.268
Drug1:Putamen_ki.c -0.00240 0.01050 -0.228
MPH_VS_ConTotal <- lmer(Con_Total ~ 1 + Drug*VS_ki + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_VS_ConTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: Con_Total ~ 1 + Drug * VS_ki + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
-49.7 -27.3 31.8 -63.7 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.06560 -0.50547 0.09341 0.53784 2.18044
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.03536 0.1880
Residual 0.01886 0.1373
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 0.44927 0.17328 2.593
Drug1 -0.07556 0.07952 -0.950
VS_ki 9.94044 11.60113 0.857
Session 0.03476 0.01401 2.481
Drug1:VS_ki 4.37213 5.40786 0.808
## Divergent PASTA corrected for Total number of ideas
MPH_Caudate_DivTotal <- lmer(Div_Total ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Caudate_DivTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: Div_Total ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
-49.0 -26.6 31.5 -63.0 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.1579 -0.5219 -0.1046 0.5056 2.0404
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.03551 0.1884
Residual 0.01893 0.1376
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 0.40375 0.03482 11.594
Drug1 0.01191 0.01030 1.156
Caudate_ki.c -0.01377 0.02249 -0.612
Session -0.03339 0.01385 -2.410
Drug1:Caudate_ki.c -0.00700 0.01035 -0.677
MPH_Putamen_DivTotal <- lmer(Div_Total ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Putamen_DivTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: Div_Total ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
-48.4 -26.1 31.2 -62.4 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.1643 -0.5388 -0.0868 0.4772 2.0479
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.03554 0.1885
Residual 0.01901 0.1379
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 0.401089 0.035166 11.406
Drug1 0.011812 0.010327 1.144
Putamen_ki.c -0.011061 0.022503 -0.492
Session -0.032006 0.014074 -2.274
Drug1:Putamen_ki.c 0.002371 0.010513 0.226
MPH_VS_DivTotal <- lmer(Div_Total ~ 1 + Drug*VS_ki + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_VS_DivTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: Div_Total ~ 1 + Drug * VS_ki + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
-49.5 -27.2 31.8 -63.5 173
Scaled residuals:
Min 1Q Median 3Q Max
-2.17925 -0.53855 -0.09489 0.50574 2.06365
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.03534 0.1880
Residual 0.01889 0.1375
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 0.55136 0.17328 3.182
Drug1 0.07569 0.07960 0.951
VS_ki -9.95034 11.60081 -0.858
Session -0.03487 0.01402 -2.486
Drug1:VS_ki -4.37706 5.41288 -0.809
## Different ending PASTA corrected for Total number of ideas
MPH_Caudate_DifEndTotal <- lmer(DifEnd_Total ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Caudate_DifEndTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: DifEnd_Total ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
-206.3 -183.9 110.1 -220.3 173
Scaled residuals:
Min 1Q Median 3Q Max
-1.6374 -0.5502 -0.0632 0.4053 2.5076
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.01609 0.12683
Residual 0.00748 0.08648
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 0.318047 0.022444 14.171
Drug1 -0.008224 0.006477 -1.270
Caudate_ki.c 0.003667 0.014929 0.246
Session -0.018966 0.008733 -2.172
Drug1:Caudate_ki.c 0.001022 0.006503 0.157
MPH_Putamen_DifEndTotal <- lmer(DifEnd_Total ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Putamen_DifEndTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: DifEnd_Total ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
-209.1 -186.7 111.5 -223.1 173
Scaled residuals:
Min 1Q Median 3Q Max
-1.68184 -0.56604 -0.04624 0.34020 2.48106
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.016166 0.1271
Residual 0.007259 0.0852
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 0.313340 0.022434 13.967
Drug1 -0.008400 0.006382 -1.316
Putamen_ki.c -0.005445 0.014917 -0.365
Session -0.016524 0.008731 -1.893
Drug1:Putamen_ki.c 0.010897 0.006497 1.677
MPH_VS_DifEndTotal <- lmer(DifEnd_Total ~ 1 + Drug*VS_ki + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_VS_DifEndTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: DifEnd_Total ~ 1 + Drug * VS_ki + Session + (1 | ID)
Data: df_MPH
AIC BIC logLik deviance df.resid
-207.7 -185.4 110.9 -221.7 173
Scaled residuals:
Min 1Q Median 3Q Max
-1.61885 -0.52688 -0.04225 0.40725 2.41080
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.015845 0.12588
Residual 0.007456 0.08635
Number of obs: 180, groups: ID, 90
Fixed effects:
Estimate Std. Error t value
(Intercept) 0.439868 0.114367 3.846
Drug1 -0.035845 0.050007 -0.717
VS_ki -8.430435 7.669035 -1.099
Session -0.018539 0.008835 -2.098
Drug1:VS_ki 1.896520 3.400667 0.558
bic_bf10(SUL2_bic,SUL1_bic) # null comes first, the results are for the null
[1] 0.1925223
bic_bf10(SUL3_bic,SUL1_bic) # convert BICs to BF
[1] 0.01479896
bic_bf10(SUL3_bic,SUL2_bic) # convert BICs to BF
[1] 0.07686883
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCgpgYGB7cn0Kcm0obGlzdD1scygpKSAjIHJlbW92ZXMgYWxsIHZhcmlhYmxlcyBmcm9tIHRoZSB3b3Jrc3BhY2UgOikKCiMgZGF0YSBzY2FsZWQgdXNpbmcgb25seSBzZXNzaW9uIDEgZGF0YSBiZWxvdwpkYXRhMSA8LSByZWFkLmNzdignfi9Ecm9wYm94L0RDQ04vQ3JlYXRpdml0eS9DcmVhdGl2aXR5U2Vzc2lvbjFfVXBkYXRlZC5jc3YnKQpkYXRhMSRQdXRhbWVuX2tpLmMgPC0gc2NhbGUoZGF0YTEkUHV0YW1lbl9raSkgI2RhdGFBbGwkUHV0YW1lbl9raSAtIG1lYW4oZGF0YUFsbCRQdXRhbWVuX2tpKQpkYXRhMSRDYXVkYXRlX2tpLmMgPC0gc2NhbGUoZGF0YTEkQ2F1ZGF0ZV9raSkgI2RhdGFBbGwkQ2F1ZGF0ZV9raSAtIG1lYW4oZGF0YUFsbCRDYXVkYXRlX2tpKQpkYXRhMSRWU19raS5jIDwtIHNjYWxlKGRhdGExJFZTX2tpKSAjZGF0YUFsbCRWU19raSAtIG1lYW4oZGF0YUFsbCRWU19raSkKd3JpdGUuY3N2KGRhdGExLCJ+L0Ryb3Bib3gvRENDTi9DcmVhdGl2aXR5L0NyZWF0aXZpdHlTZXNzaW9uMV8yLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQpRSW5mbyA8LSBxdWFudGlsZShkYXRhMSRQdXRhbWVuX2tpLmMsIHByb2I9YyguMjAsLjUsLjgwKSkKCmRhdGFOZXcgPC0gZGF0YTEgJT4lIG11dGF0ZShQdXRhbWVuUXVhcnRpbGUgPQogICAgICAgICAgICAgICAgICAgICBjYXNlX3doZW4oUHV0YW1lbl9raS5jIDw9IFFJbmZvWzFdIH4gIjEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dGFtZW5fa2kuYyA+PSBRSW5mb1szXSB+ICIyIikKKQoKd3JpdGUuY3N2KGRhdGFOZXcsIn4vRHJvcGJveC9EQ0NOL0NyZWF0aXZpdHkvQ3JlYXRpdml0eV9zZXNzaW9uMV9RdWFydGlsZWQuY3N2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgoKYGBgCgoKYGBge3J9CiMgYW5kIHRoZW4gYWRkZWQgdG8gdGhlIGZvbGxvd2luZyB3b3JrYm9vawpkYXRhQWxsIDwtIHJlYWQuY3N2KCd+L0Ryb3Bib3gvRENDTi9DcmVhdGl2aXR5L0NyZWF0aXZpdHlJRHNoZWV0X01pc3NpbmdEYXRhUmVtb3ZlZF9VcGRhdGVkLmNzdicpCnRhYmxlKGRhdGFBbGwkU2Vzc2lvbiwgZGF0YUFsbCREcnVnKQojIHR1cm4gZHJ1ZyBjb25kaXRpb25zIGludG8gZmFjdG9yIGxldmVscwpkYXRhQWxsJERydWcgPC0gZmFjdG9yKGRhdGFBbGwkRHJ1ZywgbGV2ZWxzID0gYygiTVBIIiwiU1VMIiwiUEJPIikpOwpkYXRhQWxsJFB1dGFtZW5TcGxpdCA8LSBmYWN0b3IoZGF0YUFsbCRQdXRhbWVuU3BsaXQsIGxldmVscyA9IGMoIjAiLCIxIikpOwpkYXRhQWxsJENhdWRhdGVTcGxpdCA8LSBmYWN0b3IoZGF0YUFsbCRDYXVkYXRlU3BsaXQsIGxldmVscyA9IGMoIjAiLCIxIikpOwpkYXRhQWxsJFZTU3BsaXQgPC0gZmFjdG9yKGRhdGFBbGwkVlNTcGxpdCwgbGV2ZWxzID0gYygiMCIsIjEiKSk7CgoKZGF0YUFsbCREaWZFbmRfVG90YWwgPC0gZGF0YUFsbCREaWZmZXJlbnRFbmQvZGF0YUFsbCRUb3RhbCAjIGRpdmlkZSBkaWZmZXJlbnQgZW5kIHNjb3JlcyBieSB0b3RhbCBudW1iZXIgb2YgaWRlYXMKZGF0YUFsbCREaWZFbmRfQ29uIDwtIGRhdGFBbGwkRGlmZmVyZW50RW5kL2RhdGFBbGwkQ29udmVyZ2VudF9QYXN0YSAjIGRpdmlkZSBkaWZmZXJlbnQgZW5kIHNjb3JlcyBieSB0b3RhbCBudW1iZXIgb2YgaWRlYXMKCgojIHNldCBjb250cmFzdHMgdG8gc3VtLXRvLXplcm8Kb3B0aW9ucyhjb250cmFzdHM9YygiY29udHIuc3VtIiwgImNvbnRyLnBvbHkiKSkKCiMgc2V0IHR3byBkYXRhZnJhbWVzIGZvciB0aGUgY29udHJhc3QgYmV0d2VlbiBNUEggYW5kIFBCTyAtIGJldHdlZW4gU1VMIGFuZCBQQk8KZGZfTVBIIDwtIGRwbHlyOjpmaWx0ZXIoZGF0YUFsbCwgRHJ1ZyAlaW4lIGMoIk1QSCIsIlBCTyIpKSAgCmRmX1NVTCA8LSBkcGx5cjo6ZmlsdGVyKGRhdGFBbGwsIERydWcgJWluJSBjKCJTVUwiLCJQQk8iKSkKZGF0YV9QQk8gPC0gZHBseXI6OmZpbHRlcihkYXRhQWxsLCBEcnVnICVpbiUgYygiUEJPIikpCgoKYGBgCmBgYHtyfQoKIyMgUExBQ0VCTwojIGRvZXMgY3JlYXRpdml0eSB2YXJ5IGFsc28gYXMgYSBmdW5jdGlvbiBvZiBpbmRpdmlkdWFsIGRpZmZlcmVuY2VzIGluIGRvcGFtaW5lIHN5bnRoZXNpcyBjYXBhY2l0eSB1bmRlciBiYXNlbGluZSAodW5kZXIgcGxhY2Vibyk/CgpQbGFjZWJvX1JBVF9DYXVkYXRlIDwtIGxtKENvbnZlcmdlbnRfUkFUIH4gMSArIENhdWRhdGVfa2kuYyAsIGRhdGEgPSBkYXRhX1BCTywgUkVNTD1GKQpQbGFjZWJvX1JBVF9WUyA8LSBsbShDb252ZXJnZW50X1JBVCB+IDEgKyBWU19raS5jICwgZGF0YSA9IGRhdGFfUEJPLCBSRU1MPUYpClBsYWNlYm9fUkFUX1B1dGFtZW4gPC0gbG0oQ29udmVyZ2VudF9SQVQgfiAxICsgUHV0YW1lbl9raS5jLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKClBsYWNlYm9fQVVUX0NhdWRhdGUgPC0gbG0oQVVUX2RpdmVyZ2VudCB+IDEgKyBDYXVkYXRlX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKUGxhY2Vib19BVVRfVlMgPC0gbG0oQVVUX2RpdmVyZ2VudCB+IDEgKyBWU19raS5jICwgZGF0YSA9IGRhdGFfUEJPLCBSRU1MPUYpClBsYWNlYm9fQVVUX1B1dGFtZW4gPC0gbG0oQVVUX2RpdmVyZ2VudCB+IDEgKyBQdXRhbWVuX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKClBsYWNlYm9fUEFTVEFfQ1RfQ2F1ZGF0ZSA8LSBsbShDb252ZXJnZW50X1Bhc3RhIH4gMSArIENhdWRhdGVfa2kuYyAsIGRhdGEgPSBkYXRhX1BCTywgUkVNTD1GKQpQbGFjZWJvX1BBU1RBX0NUX1ZTIDwtIGxtKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgVlNfa2kuYyAsIGRhdGEgPSBkYXRhX1BCTywgUkVNTD1GKQpQbGFjZWJvX1BBU1RBX0NUX1B1dGFtZW4gPC0gbG0oQ29udmVyZ2VudF9QYXN0YSB+IDEgKyBQdXRhbWVuX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKClBsYWNlYm9fUEFTVEFfRFRfQ2F1ZGF0ZSA8LSBsbShEaXZlcmdlbnRfUGFzdGEgfiAxICsgQ2F1ZGF0ZV9raS5jICwgZGF0YSA9IGRhdGFfUEJPLCBSRU1MPUYpClBsYWNlYm9fUEFTVEFfRFRfVlMgPC0gbG0oRGl2ZXJnZW50X1Bhc3RhIH4gMSArIFZTX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKUGxhY2Vib19QQVNUQV9EVF9QdXRhbWVuIDwtIGxtKERpdmVyZ2VudF9QYXN0YSB+IDEgKyBQdXRhbWVuX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKClBsYWNlYm9fUEFTVEFfREVfQ2F1ZGF0ZSA8LSBsbShEaWZmZXJlbnRFbmQgfiAxICsgQ2F1ZGF0ZV9raS5jICwgZGF0YSA9IGRhdGFfUEJPLCBSRU1MPUYpClBsYWNlYm9fUEFTVEFfREVfVlMgPC0gbG0oRGlmZmVyZW50RW5kIH4gMSArIFZTX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKUGxhY2Vib19QQVNUQV9ERV9QdXRhbWVuIDwtIGxtKERpZmZlcmVudEVuZCB+IDEgKyBQdXRhbWVuX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKCgpwcmludChzdW1tYXJ5KFBsYWNlYm9fUkFUX0NhdWRhdGUpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcHJpbnQoc3VtbWFyeShQbGFjZWJvX1JBVF9WUyksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwcmludChzdW1tYXJ5KFBsYWNlYm9fUkFUX1B1dGFtZW4pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCnByaW50KHN1bW1hcnkoUGxhY2Vib19BVVRfQ2F1ZGF0ZSksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwcmludChzdW1tYXJ5KFBsYWNlYm9fQVVUX1ZTKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnByaW50KHN1bW1hcnkoUGxhY2Vib19BVVRfUHV0YW1lbiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKcHJpbnQoc3VtbWFyeShQbGFjZWJvX1BBU1RBX0NUX0NhdWRhdGUpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcHJpbnQoc3VtbWFyeShQbGFjZWJvX1BBU1RBX0NUX1ZTKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnByaW50KHN1bW1hcnkoUGxhY2Vib19QQVNUQV9DVF9QdXRhbWVuKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpwcmludChzdW1tYXJ5KFBsYWNlYm9fUEFTVEFfRFRfQ2F1ZGF0ZSksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwcmludChzdW1tYXJ5KFBsYWNlYm9fUEFTVEFfRFRfVlMpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcHJpbnQoc3VtbWFyeShQbGFjZWJvX1BBU1RBX0RUX1B1dGFtZW4pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCnByaW50KHN1bW1hcnkoUGxhY2Vib19QQVNUQV9ERV9DYXVkYXRlKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnByaW50KHN1bW1hcnkoUGxhY2Vib19QQVNUQV9ERV9WUyksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwcmludChzdW1tYXJ5KFBsYWNlYm9fUEFTVEFfREVfUHV0YW1lbiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKCgpgYGAKCmBgYHtyfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMgU1VMICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTVUwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNVTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMgU1VMICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTVUwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKYGBgCgoKYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSQVQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgU3VscGlyaWRlKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBDb252ZXJnZW50IFJBVApTVUxfQ2F1ZGF0ZV9SQVQgPC0gbG1lcihDb252ZXJnZW50X1JBVCB+IDEgKyBEcnVnKkNhdWRhdGVfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9DYXVkYXRlX1JBVCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKFNVTF9DYXVkYXRlX1JBVCwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJDYXVkYXRlX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9DYXVkYXRlX1JBVCkKcXFub3JtKHJlc2lkdWFscyhTVUxfQ2F1ZGF0ZV9SQVQpKQoKCiMgU3VscGlyaWRlKlB1dGFtZW4gaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBDb252ZXJnZW50IFJBVApTVUxfUHV0YW1lbl9SQVQgPC0gbG1lcihDb252ZXJnZW50X1JBVCB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9QdXRhbWVuX1JBVCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKFNVTF9QdXRhbWVuX1JBVCwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJQdXRhbWVuX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9QdXRhbWVuX1JBVCkKcXFub3JtKHJlc2lkdWFscyhTVUxfUHV0YW1lbl9SQVQpKQoKCiMgU3VscGlyaWRlKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgQ29udmVyZ2VudCBSQVQKU1VMX1ZTX1JBVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIERydWcqVlNfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9WU19SQVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfVlNfUkFULCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlZTX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9WU19SQVQpCnFxbm9ybShyZXNpZHVhbHMoU1VMX1ZTX1JBVCkpCgoKQ29uMTwtIHNqUGxvdDo6cGxvdF9tb2RlbChTVUxfQ2F1ZGF0ZV9SQVQsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iQ2F1ZGF0ZSBLaSIpIAoKQ29uMiA8LSBzalBsb3Q6OnBsb3RfbW9kZWwoU1VMX1B1dGFtZW5fUkFULCAKICAgICAgICAgICAgICAgICAgIHNob3cudmFsdWVzPVRSVUUsIHNob3cucD1UUlVFLCB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IlB1dGFtZW4gS2kiKSAKCkNvbjMgPC0gc2pQbG90OjpwbG90X21vZGVsKFNVTF9WU19SQVQsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iVlMgS2kiKSAKCmxldmVscyhDb24xJGRhdGEkdGVybSkgPC0gYygiU1VMKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiU1VMIikKbGV2ZWxzKENvbjIkZGF0YSR0ZXJtKSA8LSBjKCJTVUwqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJTVUwiKQpsZXZlbHMoQ29uMyRkYXRhJHRlcm0pIDwtIGMoIlNVTCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIlNVTCIpCgpiZWhhdnBsb3RDb24gPC0gZ2dhcnJhbmdlKENvbjEsIENvbjIsIENvbjMsICBuY29sID0gMywKICBucm93ID0gMSwgICB3aWR0aHMgPSAxMCwKICBoZWlnaHRzID0gMykKCmFubm90YXRlX2ZpZ3VyZShiZWhhdnBsb3RDb24sIHRvcCA9IHRleHRfZ3JvYigiRWZmZWN0IG9mIFNVTCBvbiBSQVQgY29udmVyZ2VudCB0aGlua2luZyIsIAogICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMSkpCgpgYGAKCmBgYHtyfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEFVVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCiMgU3VscGlyaWRlKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgQVVUClNVTF9DYXVkYXRlX0FVVCA8LSBsbWVyKEFVVF9kaXZlcmdlbnQgfiAxICsgRHJ1ZypDYXVkYXRlX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfQ2F1ZGF0ZV9BVVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfQ2F1ZGF0ZV9BVVQsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiQ2F1ZGF0ZV9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChTVUxfQ2F1ZGF0ZV9BVVQpCnFxbm9ybShyZXNpZHVhbHMoU1VMX0NhdWRhdGVfQVVUKSkKCiMgU3VscGlyaWRlKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgQVVUClNVTF9QdXRhbWVuX0FVVCA8LSBsbWVyKEFVVF9kaXZlcmdlbnQgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfUHV0YW1lbl9BVVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfUHV0YW1lbl9BVVQsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiUHV0YW1lbl9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChTVUxfUHV0YW1lbl9BVVQpCnFxbm9ybShyZXNpZHVhbHMoU1VMX1B1dGFtZW5fQVVUKSkKCiMgU3VscGlyaWRlKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgZGl2ZXJnZW50IEFVVApTVUxfVlNfQVVUIDwtIGxtZXIoQVVUX2RpdmVyZ2VudCB+IDEgKyBEcnVnKlZTX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfVlNfQVVUKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoU1VMX1ZTX0FVVCwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJWU19raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChTVUxfVlNfQVVUKQpxcW5vcm0ocmVzaWR1YWxzKFNVTF9WU19BVVQpKQoKCkRpdjE8LSBzalBsb3Q6OnBsb3RfbW9kZWwoU1VMX0NhdWRhdGVfQVVULCAKICAgICAgICAgICAgICAgICAgIHNob3cudmFsdWVzPVRSVUUsIHNob3cucD1UUlVFLCB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IkNhdWRhdGUgS2kiKSAKCkRpdjIgPC0gc2pQbG90OjpwbG90X21vZGVsKFNVTF9QdXRhbWVuX0FVVCwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJQdXRhbWVuIEtpIikgCgpEaXYzIDwtIHNqUGxvdDo6cGxvdF9tb2RlbChTVUxfVlNfQVVULCAKICAgICAgICAgICAgICAgICAgIHNob3cudmFsdWVzPVRSVUUsIHNob3cucD1UUlVFLCB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IlZTIEtpIikgCgpsZXZlbHMoRGl2MSRkYXRhJHRlcm0pIDwtIGMoIlNVTCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIlNVTCIpCmxldmVscyhEaXYyJGRhdGEkdGVybSkgPC0gYygiU1VMKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiU1VMIikKbGV2ZWxzKERpdjMkZGF0YSR0ZXJtKSA8LSBjKCJTVUwqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJTVUwiKQoKYmVoYXZwbG90RGl2IDwtIGdnYXJyYW5nZShEaXYxLCBEaXYyLCBEaXYzLCAgbmNvbCA9IDMsCiAgbnJvdyA9IDEsICAgd2lkdGhzID0gMTAsCiAgaGVpZ2h0cyA9IDMpCgphbm5vdGF0ZV9maWd1cmUoYmVoYXZwbG90RGl2LCB0b3AgPSB0ZXh0X2dyb2IoIkVmZmVjdCBvZiBTVUwgb24gQVVUIGRpdmVyZ2VudCB0aGlua2luZyIsIAogICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMSkpCmBgYAoKCgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFBBU1RBICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDb252ZXJnZW50ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKIyBTdWxwaXJpZGUqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGNvbnZlcmdlbnQgUGFzdGEKU1VMX0NhdWRhdGVfUGFzdENvbiA8LSBsbWVyKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgRHJ1ZypDYXVkYXRlX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfQ2F1ZGF0ZV9QYXN0Q29uKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoU1VMX0NhdWRhdGVfUGFzdENvbiwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJDYXVkYXRlX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9DYXVkYXRlX1Bhc3RDb24pCnFxbm9ybShyZXNpZHVhbHMoU1VMX0NhdWRhdGVfUGFzdENvbikpCgojIFN1bHBpcmlkZSpDYXVkYXRlIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgY29udmVyZ2VudCBQYXN0YQpTVUxfUHV0YW1lbl9QYXN0Q29uIDwtIGxtZXIoQ29udmVyZ2VudF9QYXN0YSB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9QdXRhbWVuX1Bhc3RDb24pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfUHV0YW1lbl9QYXN0Q29uLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlB1dGFtZW5fa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoU1VMX1B1dGFtZW5fUGFzdENvbikKcXFub3JtKHJlc2lkdWFscyhTVUxfUHV0YW1lbl9QYXN0Q29uKSkKCiMgU3VscGlyaWRlKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBjb252ZXJnZW50IFBhc3RhClNVTF9WU19QYXN0Q29uIDwtIGxtZXIoQ29udmVyZ2VudF9QYXN0YSB+IDEgKyBEcnVnKlZTX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfVlNfUGFzdENvbiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKFNVTF9WU19QYXN0Q29uLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlZTX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9WU19QYXN0Q29uKQpxcW5vcm0ocmVzaWR1YWxzKFNVTF9WU19QYXN0Q29uKSkKCgoKUGFzdGExPC0gc2pQbG90OjpwbG90X21vZGVsKFNVTF9DYXVkYXRlX1Bhc3RDb24sIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iQ2F1ZGF0ZSBLaSIpIAoKUGFzdGEyIDwtIHNqUGxvdDo6cGxvdF9tb2RlbChTVUxfUHV0YW1lbl9QYXN0Q29uLCAKICAgICAgICAgICAgICAgICAgIHNob3cudmFsdWVzPVRSVUUsIHNob3cucD1UUlVFLCB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IlB1dGFtZW4gS2kiKSAKClBhc3RhMyA8LSBzalBsb3Q6OnBsb3RfbW9kZWwoU1VMX1ZTX1Bhc3RDb24sIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iVlMgS2kiKSAKCmxldmVscyhQYXN0YTEkZGF0YSR0ZXJtKSA8LSBjKCJTVUwqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJTVUwiKQpsZXZlbHMoUGFzdGEyJGRhdGEkdGVybSkgPC0gYygiU1VMKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiU1VMIikKbGV2ZWxzKFBhc3RhMyRkYXRhJHRlcm0pIDwtIGMoIlNVTCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIlNVTCIpCgpiZWhhdnBsb3RQYXN0YTEgPC0gZ2dhcnJhbmdlKFBhc3RhMSwgUGFzdGEyLCBQYXN0YTMsICBuY29sID0gMywKICBucm93ID0gMSwgICB3aWR0aHMgPSAxMCwKICBoZWlnaHRzID0gMykKCmFubm90YXRlX2ZpZ3VyZShiZWhhdnBsb3RQYXN0YTEsIHRvcCA9IHRleHRfZ3JvYigiRWZmZWN0IG9mIFNVTCBvbiBBTlQgY29udmVyZ2VudCB0aGlua2luZyIsIAogICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMSkpCgpgYGAKCgpgYGB7cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBQQVNUQSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMgRGl2ZXJnZW50ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKIyBTdWxwaXJpZGUqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YQpTVUxfQ2F1ZGF0ZV9QYXN0RGl2IDwtIGxtZXIoRGl2ZXJnZW50X1Bhc3RhIH4gMSArIERydWcqQ2F1ZGF0ZV9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfU1VMLCBSRU1MPUYpCnByaW50KHN1bW1hcnkoU1VMX0NhdWRhdGVfUGFzdERpdiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKFNVTF9DYXVkYXRlX1Bhc3REaXYsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiQ2F1ZGF0ZV9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChTVUxfQ2F1ZGF0ZV9QYXN0RGl2KQpxcW5vcm0ocmVzaWR1YWxzKFNVTF9DYXVkYXRlX1Bhc3REaXYpKQoKCiMgU3VscGlyaWRlKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgUGFzdGEKU1VMX1B1dGFtZW5fUGFzdERpdiA8LSBsbWVyKERpdmVyZ2VudF9QYXN0YSB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9QdXRhbWVuX1Bhc3REaXYpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfUHV0YW1lbl9QYXN0RGl2LCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlB1dGFtZW5fa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoU1VMX1B1dGFtZW5fUGFzdERpdikKcXFub3JtKHJlc2lkdWFscyhTVUxfUHV0YW1lbl9QYXN0RGl2KSkKCiMgU3VscGlyaWRlKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgZGl2ZXJnZW50IFBhc3RhClNVTF9WU19QYXN0RGl2IDwtIGxtZXIoRGl2ZXJnZW50X1Bhc3RhIH4gMSArIERydWcqVlNfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9WU19QYXN0RGl2KSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoU1VMX1ZTX1Bhc3REaXYsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiVlNfa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoU1VMX1ZTX1Bhc3REaXYpCnFxbm9ybShyZXNpZHVhbHMoU1VMX1ZTX1Bhc3REaXYpKQoKCgpQYXN0YTQ8LSBzalBsb3Q6OnBsb3RfbW9kZWwoU1VMX0NhdWRhdGVfUGFzdERpdiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJDYXVkYXRlIEtpIikgCgpQYXN0YTUgPC0gc2pQbG90OjpwbG90X21vZGVsKFNVTF9QdXRhbWVuX1Bhc3REaXYsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iUHV0YW1lbiBLaSIpIAoKUGFzdGE2IDwtIHNqUGxvdDo6cGxvdF9tb2RlbChTVUxfVlNfUGFzdERpdiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJWUyBLaSIpIAoKbGV2ZWxzKFBhc3RhNCRkYXRhJHRlcm0pIDwtIGMoIlNVTCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIlNVTCIpCmxldmVscyhQYXN0YTUkZGF0YSR0ZXJtKSA8LSBjKCJTVUwqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJTVUwiKQpsZXZlbHMoUGFzdGE2JGRhdGEkdGVybSkgPC0gYygiU1VMKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiU1VMIikKCmJlaGF2cGxvdFBhc3RhMiA8LSBnZ2FycmFuZ2UoUGFzdGE0LCBQYXN0YTUsIFBhc3RhNiwgIG5jb2wgPSAzLAogIG5yb3cgPSAxLCAgIHdpZHRocyA9IDEwLAogIGhlaWdodHMgPSAzKQoKYW5ub3RhdGVfZmlndXJlKGJlaGF2cGxvdFBhc3RhMiwgdG9wID0gdGV4dF9ncm9iKCJFZmZlY3Qgb2YgU1VMIG9uIEFOVCBkaXZlcmdlbnQgdGhpbmtpbmciLCAKICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYWNlID0gImJvbGQiLCBzaXplID0gMjEpKQoKYGBgCgpgYGB7cn0KIyMjIyMjIyBEaWZmZXJlbnQgRW5kIFBBU1RBICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBTdWxwaXJpZGUqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YSBkaXZlcmdlbnQgcmVzcG9uc2UKU1VMX0NhdWRhdGVfUGFzdERpZiA8LSBsbWVyKERpZmZlcmVudEVuZCB+IDEgKyBEcnVnKkNhdWRhdGVfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9DYXVkYXRlX1Bhc3REaWYpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfQ2F1ZGF0ZV9QYXN0RGlmLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIkNhdWRhdGVfa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoU1VMX0NhdWRhdGVfUGFzdERpZikKcXFub3JtKHJlc2lkdWFscyhTVUxfQ2F1ZGF0ZV9QYXN0RGlmKSkKCiMgU3VscGlyaWRlKlB1dGFtZW4gaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgUGFzdGEgZGl2ZXJnZW50IHJlc3BvbnNlClNVTF9QdXRhbWVuX1Bhc3REaWYgPC0gbG1lcihEaWZmZXJlbnRFbmQgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfUHV0YW1lbl9QYXN0RGlmKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoU1VMX1B1dGFtZW5fUGFzdERpZiwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJQdXRhbWVuX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9QdXRhbWVuX1Bhc3REaWYpCnFxbm9ybShyZXNpZHVhbHMoU1VMX1B1dGFtZW5fUGFzdERpZikpCgojIFN1bHBpcmlkZSpWUyBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YSBkaXZlcmdlbnQgcmVzcG9uc2UKU1VMX1ZTX1Bhc3REaWYgPC0gbG1lcihEaWZmZXJlbnRFbmQgfiAxICsgRHJ1ZypWU19raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfU1VMLCBSRU1MPUYpCnByaW50KHN1bW1hcnkoU1VMX1ZTX1Bhc3REaWYpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfVlNfUGFzdERpZiwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJWU19raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChTVUxfVlNfUGFzdERpZikKcXFub3JtKHJlc2lkdWFscyhTVUxfVlNfUGFzdERpZikpCgoKCgpQYXN0YTc8LSBzalBsb3Q6OnBsb3RfbW9kZWwoU1VMX0NhdWRhdGVfUGFzdERpZiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJDYXVkYXRlIEtpIikgCgpQYXN0YTggPC0gc2pQbG90OjpwbG90X21vZGVsKFNVTF9QdXRhbWVuX1Bhc3REaWYsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iUHV0YW1lbiBLaSIpIAoKUGFzdGE5IDwtIHNqUGxvdDo6cGxvdF9tb2RlbChTVUxfVlNfUGFzdERpZiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJWUyBLaSIpIAoKbGV2ZWxzKFBhc3RhNyRkYXRhJHRlcm0pIDwtIGMoIlNVTCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIlNVTCIpCmxldmVscyhQYXN0YTgkZGF0YSR0ZXJtKSA8LSBjKCJTVUwqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJTVUwiKQpsZXZlbHMoUGFzdGE5JGRhdGEkdGVybSkgPC0gYygiU1VMKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiU1VMIikKCmJlaGF2cGxvdFBhc3RhMyA8LSBnZ2FycmFuZ2UoUGFzdGE3LCBQYXN0YTgsIFBhc3RhOSwgIG5jb2wgPSAzLAogIG5yb3cgPSAxLCAgIHdpZHRocyA9IDEwLAogIGhlaWdodHMgPSAzKQoKYW5ub3RhdGVfZmlndXJlKGJlaGF2cGxvdFBhc3RhMywgdG9wID0gdGV4dF9ncm9iKCJFZmZlY3Qgb2YgU1VMIG9uIEFOVCByZXNwb25zZSBkaXZlcmdlbmNlIiwgCiAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDIxKSkKCmBgYAoKCgoKYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBNUEggIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE1QSCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMgTVBIICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBNUEggIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE1QSCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpgYGAKCgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJBVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBNUEgqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIENvbnZlcmdlbnQgUkFUCk1QSF9DYXVkYXRlX1JBVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIERydWcqQ2F1ZGF0ZV9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfUkFUKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoTVBIX0NhdWRhdGVfUkFULCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIkNhdWRhdGVfa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoTVBIX0NhdWRhdGVfUkFUKQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9DYXVkYXRlX1JBVCkpCgojIE1QSCpQdXRhbWVuIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgQ29udmVyZ2VudCBSQVQKTVBIX1B1dGFtZW5fUkFUIDwtIGxtZXIoQ29udmVyZ2VudF9SQVQgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9SQVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfUHV0YW1lbl9SQVQsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiUHV0YW1lbl9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfUHV0YW1lbl9SQVQpCnFxbm9ybShyZXNpZHVhbHMoTVBIX1B1dGFtZW5fUkFUKSkKCiMgU3VscGlyaWRlKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgQ29udmVyZ2VudCBSQVQKTVBIX1ZTX1JBVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIERydWcqVlNfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9WU19SQVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfVlNfUkFULCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlZTX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KE1QSF9WU19SQVQpCnFxbm9ybShyZXNpZHVhbHMoTVBIX1ZTX1JBVCkpCmBgYAoKYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBBVVQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgTVBIKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgQVVUCk1QSF9DYXVkYXRlX0FVVCA8LSBsbWVyKEFVVF9kaXZlcmdlbnQgfiAxICsgRHJ1ZypDYXVkYXRlX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfQ2F1ZGF0ZV9BVVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfQ2F1ZGF0ZV9BVVQsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiQ2F1ZGF0ZV9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfQ2F1ZGF0ZV9BVVQpCnFxbm9ybShyZXNpZHVhbHMoTVBIX0NhdWRhdGVfQVVUKSkKCiMgTVBIKlB1dGFtZW4gaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgQVVUCk1QSF9QdXRhbWVuX0FVVCA8LSBsbWVyKEFVVF9kaXZlcmdlbnQgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9BVVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfUHV0YW1lbl9BVVQsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiUHV0YW1lbl9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfUHV0YW1lbl9BVVQpCnFxbm9ybShyZXNpZHVhbHMoTVBIX1B1dGFtZW5fQVVUKSkKCiMgTVBIKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgZGl2ZXJnZW50IEFVVApNUEhfVlNfQVVUIDwtIGxtZXIoQVVUX2RpdmVyZ2VudCB+IDEgKyBEcnVnKlZTX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfVlNfQVVUKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoTVBIX1ZTX0FVVCwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJWU19raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfVlNfQVVUKQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9WU19BVVQpKQpgYGAKCgoKYGBge3J9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMgUEFTVEEgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIENvbnZlcmdlbnQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBNUEgqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGNvbnZlcmdlbnQgUGFzdGEKTVBIX0NhdWRhdGVfUGFzdENvbiA8LSBsbWVyKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgRHJ1ZypDYXVkYXRlX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9DYXVkYXRlX1Bhc3RDb24pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfQ2F1ZGF0ZV9QYXN0Q29uLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIkNhdWRhdGVfa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoTVBIX0NhdWRhdGVfUGFzdENvbikKcXFub3JtKHJlc2lkdWFscyhNUEhfQ2F1ZGF0ZV9QYXN0Q29uKSkKCgojIE1QSCpQdXRhbWVuIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgY29udmVyZ2VudCBQYXN0YQpNUEhfUHV0YW1lbl9QYXN0Q29uIDwtIGxtZXIoQ29udmVyZ2VudF9QYXN0YSB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9QdXRhbWVuX1Bhc3RDb24pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfUHV0YW1lbl9QYXN0Q29uLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlB1dGFtZW5fa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoTVBIX1B1dGFtZW5fUGFzdENvbikKcXFub3JtKHJlc2lkdWFscyhNUEhfUHV0YW1lbl9QYXN0Q29uKSkKCiMgTVBIKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgY29udmVyZ2VudCBQYXN0YQpNUEhfVlNfUGFzdENvbiA8LSBsbWVyKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgRHJ1ZypWU19raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX1ZTX1Bhc3RDb24pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfVlNfUGFzdENvbiwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJWU19raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfVlNfUGFzdENvbikKcXFub3JtKHJlc2lkdWFscyhNUEhfVlNfUGFzdENvbikpCgoKc2V0X3RoZW1lKAogIGJhc2UgPSB0aGVtZV9jbGFzc2ljKCksIAogIGxlZ2VuZC50aXRsZS5mYWNlID0gIml0YWxpYyIsICMgdGl0bGUgZm9udCBmYWNlCiAgbGVnZW5kLmluc2lkZSA9IFRSVUUsICAgICAgICAgIyBsZWdlbmQgaW5zaWRlIHBsb3QKICBsZWdlbmQuY29sb3IgPSAiZ3JleTUwIiwgICAgICAjIGxlZ2VuZCBsYWJlbCBjb2xvcgogIGxlZ2VuZC5wb3MgPSAiYm90dG9tIHJpZ2h0IiwgICMgbGVnZW5kIHBvc2l0aW9uIGluc2lkZSBwbG90CiAgdGl0bGUuc2l6ZSA9IDIsCiAgdGl0bGUuYWxpZ24gPSAiY2VudGVyIiwKICBheGlzLnRpdGxlLnNpemUgPSAxLjEsCiAgYXhpcy50ZXh0c2l6ZSA9IDEuMSwKICBsZWdlbmQuc2l6ZSA9IDEsCiAgbGVnZW5kLnRpdGxlLnNpemUgPSAyLAogIGdlb20ubGFiZWwuc2l6ZSA9IDMKKQoKQ29udmVyZ2VudDEgPC0gc2pQbG90OjpwbG90X21vZGVsKE1QSF9DYXVkYXRlX1Bhc3RDb24sCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywgCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iQ2F1ZGF0ZSBLaSIpIAoKQ29udmVyZ2VudDIgPC0gc2pQbG90OjpwbG90X21vZGVsKE1QSF9QdXRhbWVuX1Bhc3RDb24sIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJQdXRhbWVuIEtpIikgCgpDb252ZXJnZW50MyA8LSBzalBsb3Q6OnBsb3RfbW9kZWwoTVBIX1ZTX1Bhc3RDb24sIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iVlMgS2kiKSAKCmxldmVscyhDb252ZXJnZW50MSRkYXRhJHRlcm0pIDwtIGMoIk1QSCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIk1QSCIpCmxldmVscyhDb252ZXJnZW50MiRkYXRhJHRlcm0pIDwtIGMoIk1QSCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIk1QSCIpCmxldmVscyhDb252ZXJnZW50MyRkYXRhJHRlcm0pIDwtIGMoIk1QSCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIk1QSCIpCgoKYmVoYXZwbG90IDwtIGdnYXJyYW5nZShDb252ZXJnZW50MSwgQ29udmVyZ2VudDIsIENvbnZlcmdlbnQzLCAgbmNvbCA9IDMsCiAgbnJvdyA9IDEsICAgd2lkdGhzID0gMTAsCiAgaGVpZ2h0cyA9IDMpCgphbm5vdGF0ZV9maWd1cmUoYmVoYXZwbG90LCB0b3AgPSB0ZXh0X2dyb2IoIkVmZmVjdCBvZiBNUEggb24gY29udmVyZ2VudCB0aGlua2luZyIsIAogICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMSkpCgpgYGAKCmBgYHtyfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFBBU1RBICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBEaXZlcmdlbnQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBNUEgqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YQpNUEhfQ2F1ZGF0ZV9QYXN0RGl2IDwtIGxtZXIoRGl2ZXJnZW50X1Bhc3RhIH4gMSArIERydWcqQ2F1ZGF0ZV9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfUGFzdERpdiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKE1QSF9DYXVkYXRlX1Bhc3REaXYsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiQ2F1ZGF0ZV9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfQ2F1ZGF0ZV9QYXN0RGl2KQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9DYXVkYXRlX1Bhc3REaXYpKQoKIyBNUEgqUHV0YW1lbiBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YQpNUEhfUHV0YW1lbl9QYXN0RGl2IDwtIGxtZXIoRGl2ZXJnZW50X1Bhc3RhIH4gMSArIERydWcqUHV0YW1lbl9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX1B1dGFtZW5fUGFzdERpdiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKE1QSF9QdXRhbWVuX1Bhc3REaXYsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiUHV0YW1lbl9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfUHV0YW1lbl9QYXN0RGl2KQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9QdXRhbWVuX1Bhc3REaXYpKQoKIyBNUEgqVlMgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgUGFzdGEKTVBIX1ZTX1Bhc3REaXYgPC0gbG1lcihEaXZlcmdlbnRfUGFzdGEgfiAxICsgRHJ1ZypWU19raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX1ZTX1Bhc3REaXYpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfVlNfUGFzdERpdiwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJWU19raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfVlNfUGFzdERpdikKcXFub3JtKHJlc2lkdWFscyhNUEhfVlNfUGFzdERpdikpCgpEaXZlcmdlbnQxPC0gc2pQbG90OjpwbG90X21vZGVsKE1QSF9DYXVkYXRlX1Bhc3REaXYsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iQ2F1ZGF0ZSBLaSIpIAoKRGl2ZXJnZW50MiA8LSBzalBsb3Q6OnBsb3RfbW9kZWwoTVBIX1B1dGFtZW5fUGFzdERpdiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJQdXRhbWVuIEtpIikgCgpEaXZlcmdlbnQzIDwtIHNqUGxvdDo6cGxvdF9tb2RlbChNUEhfVlNfUGFzdERpdiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJWUyBLaSIpIAoKbGV2ZWxzKERpdmVyZ2VudDEkZGF0YSR0ZXJtKSA8LSBjKCJNUEgqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJNUEgiKQpsZXZlbHMoRGl2ZXJnZW50MiRkYXRhJHRlcm0pIDwtIGMoIk1QSCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIk1QSCIpCmxldmVscyhEaXZlcmdlbnQzJGRhdGEkdGVybSkgPC0gYygiTVBIKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiTVBIIikKCmJlaGF2cGxvdDIgPC0gZ2dhcnJhbmdlKERpdmVyZ2VudDEsIERpdmVyZ2VudDIsIERpdmVyZ2VudDMsICBuY29sID0gMywKICBucm93ID0gMSwgICB3aWR0aHMgPSAxMCwKICBoZWlnaHRzID0gMykKCmFubm90YXRlX2ZpZ3VyZShiZWhhdnBsb3QyLCB0b3AgPSB0ZXh0X2dyb2IoIkVmZmVjdCBvZiBNUEggb24gZGl2ZXJnZW50IHRoaW5raW5nIiwgCiAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDIxKSkKCgpgYGAKCmBgYHtyfQojIyMjIyMjIERpZmZlcmVudCBFbmQgUEFTVEEgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIE1QSCpDYXVkYXRlIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgZGl2ZXJnZW50IFBhc3RhIGRpdmVyZ2VudCByZXNwb25zZQpNUEhfQ2F1ZGF0ZV9QYXN0RGlmIDwtIGxtZXIoRGlmZmVyZW50RW5kIH4gMSArIERydWcqQ2F1ZGF0ZV9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfUGFzdERpZiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKE1QSF9DYXVkYXRlX1Bhc3REaWYsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiQ2F1ZGF0ZV9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfQ2F1ZGF0ZV9QYXN0RGlmKQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9DYXVkYXRlX1Bhc3REaWYpKQoKIyBNUEgqUHV0YW1lbiBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YSBkaXZlcmdlbnQgcmVzcG9uc2UKTVBIX1B1dGFtZW5fUGFzdERpZiA8LSBsbWVyKERpZmZlcmVudEVuZCB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9QdXRhbWVuX1Bhc3REaWYpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfUHV0YW1lbl9QYXN0RGlmLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlB1dGFtZW5fa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoTVBIX1B1dGFtZW5fUGFzdERpZikKcXFub3JtKHJlc2lkdWFscyhNUEhfUHV0YW1lbl9QYXN0RGlmKSkKCiMgTVBIKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgZGl2ZXJnZW50IFBhc3RhIGRpdmVyZ2VudCByZXNwb25zZQpNUEhfVlNfUGFzdERpZiA8LSBsbWVyKERpZmZlcmVudEVuZCB+IDEgKyBEcnVnKlZTX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfVlNfUGFzdERpZiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKE1QSF9WU19QYXN0RGlmLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlZTX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KE1QSF9WU19QYXN0RGlmKQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9WU19QYXN0RGlmKSkKCgpBbGxEaWYgPC0gbG1lcihEaWZmZXJlbnRFbmQgfiAxICsgRHJ1ZypWU19raS5jKyBEcnVnKlB1dGFtZW5fa2kuYyArIERydWcqQ2F1ZGF0ZV9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoQWxsRGlmKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgoKRGlmRW5kMTwtIHNqUGxvdDo6cGxvdF9tb2RlbChNUEhfQ2F1ZGF0ZV9QYXN0RGlmLCAKICAgICAgICAgICAgICAgICAgIHNob3cudmFsdWVzPVRSVUUsIHNob3cucD1UUlVFLCB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IkNhdWRhdGUgS2kiKSAKCkRpZkVuZDIgPC0gc2pQbG90OjpwbG90X21vZGVsKE1QSF9QdXRhbWVuX1Bhc3REaWYsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iUHV0YW1lbiBLaSIpIAoKRGlmRW5kMyA8LSBzalBsb3Q6OnBsb3RfbW9kZWwoTVBIX1ZTX1Bhc3REaWYsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsICB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IlZTIEtpIikgCgpsZXZlbHMoRGlmRW5kMSRkYXRhJHRlcm0pIDwtIGMoIk1QSCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIk1QSCIpCmxldmVscyhEaWZFbmQyJGRhdGEkdGVybSkgPC0gYygiTVBIKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiTVBIIikKbGV2ZWxzKERpZkVuZDMkZGF0YSR0ZXJtKSA8LSBjKCJNUEgqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJNUEgiKQoKYmVoYXZwbG90MyA8LSBnZ2FycmFuZ2UoRGlmRW5kMSwgRGlmRW5kMiwgRGlmRW5kMywgIG5jb2wgPSAzLAogIG5yb3cgPSAxLCAgIHdpZHRocyA9IDEwLAogIGhlaWdodHMgPSAzKQoKYW5ub3RhdGVfZmlndXJlKGJlaGF2cGxvdDMsIHRvcCA9IHRleHRfZ3JvYigiRWZmZWN0IG9mIE1QSCBvbiByZXNwb25zZSBkaXZlcmdlbmNlIiwgCiAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDIxKSkKCgpgYGAKCmBgYHtyfQpTZXNzaW9uMSA8LSBkYXRhQWxsW2dyZXAoIjEiLCBkYXRhQWxsJFNlc3Npb24pLF0KCmdnc2NhdHRlcihTZXNzaW9uMSwgeCA9ICJDYXVkYXRlX2tpIiwgeSA9ICJLRE9DU3RvdGFsIiwKICAgICAgICAgIGFkZCA9ICJyZWcubGluZSIsIGNvbmYuaW50ID0gVFJVRSwKICAgICAgICAgIGNvci5jb2VmID0gVFJVRSwgY29yLm1ldGhvZCA9ICJwZWFyc29uIiwKICAgICAgICAgIHhsYWIgPSAiQ2F1ZGF0ZUtpKSIsIHlsYWIgPSAiU3ViamVjdGl2ZUNyZWF0aXZpdHkiKQoKZ2dzY2F0dGVyKFNlc3Npb24xLCB4ID0gIlB1dGFtZW5fa2kiLCB5ID0gIktET0NTdG90YWwiLAogICAgICAgICAgYWRkID0gInJlZy5saW5lIiwgY29uZi5pbnQgPSBUUlVFLAogICAgICAgICAgY29yLmNvZWYgPSBUUlVFLCBjb3IubWV0aG9kID0gInBlYXJzb24iLAogICAgICAgICAgeGxhYiA9ICJDYXVkYXRlS2kpIiwgeWxhYiA9ICJTdWJqZWN0aXZlQ3JlYXRpdml0eSIpCgpnZ3NjYXR0ZXIoU2Vzc2lvbjEsIHggPSAiVlNfa2kiLCB5ID0gIktET0NTdG90YWwiLAogICAgICAgICAgYWRkID0gInJlZy5saW5lIiwgY29uZi5pbnQgPSBUUlVFLAogICAgICAgICAgY29yLmNvZWYgPSBUUlVFLCBjb3IubWV0aG9kID0gInBlYXJzb24iLAogICAgICAgICAgeGxhYiA9ICJDYXVkYXRlS2kpIiwgeWxhYiA9ICJTdWJqZWN0aXZlQ3JlYXRpdml0eSIpCgoKYGBgCgpgYGB7cn0KIyBFY29sb2dpY2FsIHZhbGlkaXR5CgpDb25DciA8LSBsbWVyKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgS0RPQ1N0b3RhbCArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRhdGFBbGwsIFJFTUw9RikgCnByaW50KHN1bW1hcnkoQ29uQ3IpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCkRpdkFydCA8LSBsbWVyKERpdmVyZ2VudF9QYXN0YSB+IDEgKyBLRE9DU3RvdGFsICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGF0YUFsbCwgUkVNTD1GKSAKcHJpbnQoc3VtbWFyeShEaXZBcnQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCkRpZkVuZCA8LSBsbWVyKERpZmZlcmVudEVuZCB+IDEgKyBLRE9DU3RvdGFsICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGF0YUFsbCwgUkVNTD1GKSAKcHJpbnQoc3VtbWFyeShEaWZFbmQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCkNvbkNyIDwtIGxtZXIoQ29udmVyZ2VudF9SQVQgfiAxICsgS0RPQ1N0b3RhbCArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRhdGFBbGwsIFJFTUw9RikgCnByaW50KHN1bW1hcnkoQ29uQ3IpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCkNvbkNyIDwtIGxtZXIoQVVUX2RpdmVyZ2VudCB+IDEgKyBLRE9DU3RvdGFsICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGF0YUFsbCwgUkVNTD1GKSAKcHJpbnQoc3VtbWFyeShDb25DciksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApgYGAKCmBgYHtyfQoKIyMgY3JpdGVyaW9uIHZhbGlkaXR5CgpDb25EaXZQYXN0YSA8LSBsbWVyKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgRGl2ZXJnZW50X1Bhc3RhICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGF0YUFsbCwgUkVNTD1GKSAKcHJpbnQoc3VtbWFyeShDb25EaXZQYXN0YSksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKQ29uRGlmUGFzdGEgPC0gbG1lcihDb252ZXJnZW50X1Bhc3RhIH4gMSArIERpZmZlcmVudEVuZCArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRhdGFBbGwsIFJFTUw9RikgCnByaW50KHN1bW1hcnkoQ29uRGlmUGFzdGEpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCiMjIGNvbnN0cnVjdCB2YWxpZGl0eQoKCkNvbkRpZlJBVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIERpZmZlcmVudEVuZCArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRhdGFBbGwsIFJFTUw9RikgCnByaW50KHN1bW1hcnkoQ29uRGlmUkFUKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpDb25QYXN0YVJBVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIENvbnZlcmdlbnRfUGFzdGEgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkYXRhQWxsLCBSRU1MPUYpIApwcmludChzdW1tYXJ5KENvblBhc3RhUkFUKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpEaXZQYXN0YUFVVCA8LSBsbWVyKEFVVF9kaXZlcmdlbnQgfiAxICsgRGl2ZXJnZW50X1Bhc3RhICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGF0YUFsbCwgUkVNTD1GKSAKcHJpbnQoc3VtbWFyeShEaXZQYXN0YUFVVCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKRGlmUGFzdGFBVVQgPC0gbG1lcihBVVRfZGl2ZXJnZW50IH4gMSArIERpZmZlcmVudEVuZCArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRhdGFBbGwsIFJFTUw9RikgCnByaW50KHN1bW1hcnkoRGlmUGFzdGFBVVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCkNvbkRpdlJBVEFVVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIEFVVF9kaXZlcmdlbnQgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkYXRhQWxsLCBSRU1MPUYpIApwcmludChzdW1tYXJ5KENvbkRpdlJBVEFVVCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKCmBgYAoKYGBge3J9CmlmICghcmVxdWlyZShyZW1vdGVzKSkgewogICAgaW5zdGFsbC5wYWNrYWdlcygicmVtb3RlcyIpCn0KcmVtb3Rlczo6aW5zdGFsbF9naXRodWIoJ2pvcnZsYW4vcmFpbmNsb3VkcGxvdHMnKQoKbGlicmFyeShyYWluY2xvdWRwbG90cykKCmxpYnJhcnkoZm9yY2F0cykKCiMgaHR0cHM6Ly9naXRodWIuY29tL2pvcnZsYW4vcmFpbmNsb3VkcGxvdHMKYGBgCmBgYHtyfQpwbG90X2RhdGE8LWRmX01QSFtjKCJEaWZmZXJlbnRFbmQiLCJQdXRhbWVuU3BsaXQiLCJJRCIsIkRydWciKV0KY29sbmFtZXMocGxvdF9kYXRhKVsxXTwtInlfYXhpcyIKY29sbmFtZXMocGxvdF9kYXRhKVszXTwtImlkIgpjb2xuYW1lcyhwbG90X2RhdGEpWzRdPC0iZ3JvdXAiCgoKcGxvdF9kYXRhMiA8LSBwbG90X2RhdGEgJT4lIG11dGF0ZSh4X2F4aXMgPQogICAgICAgICAgICAgICAgICAgICBjYXNlX3doZW4oKFB1dGFtZW5TcGxpdCA9PSAwICYgZ3JvdXAgPT0gIlBCTyIpIH4gMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHV0YW1lblNwbGl0ID09IDEgJiBncm91cCAgPT0gIlBCTyIpIH4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQdXRhbWVuU3BsaXQgPT0gMCAmIGdyb3VwICA9PSAiTVBIIikgfiAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB1dGFtZW5TcGxpdCA9PSAxICYgZ3JvdXAgID09ICJNUEgiKSB+IDIpKQp0ZW1wPC1wbG90X2RhdGEkUHV0YW1lblNwbGl0CgpwbG90X2RhdGEkUHV0YW1lblNwbGl0PC1wbG90X2RhdGEyJHhfYXhpcwpjb2xuYW1lcyhwbG90X2RhdGEpWzJdPC0ieF9heGlzIgoKZm9yIChpIGluIDE6MTgwKQp7CnBsb3RfZGF0YVtpLDVdIDwtIHBsb3RfZGF0YVtpLDJdICsgcnVuaWYoMSwgMCwgMC4wOSkKfQpjb2xuYW1lcyhwbG90X2RhdGEpWzVdPC0iaml0IgoKcGxvdF9kYXRhWyw2XSA8LXRlbXAKY29sbmFtZXMocGxvdF9kYXRhKVs2XTwtIlB1dGFtZW5TcGxpdCIKCnBsb3RfZGF0YSA8LSBwbG90X2RhdGEgJT4lIG11dGF0ZShQdXRhbWVuU3BsaXQgPQogICAgICAgICAgICAgICAgICAgICBjYXNlX3doZW4oKFB1dGFtZW5TcGxpdCA9PSAwKSB+ICJsb3cgS2kiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQdXRhbWVuU3BsaXQgPT0gMSApIH4gImhpZ2ggS2kiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAKIyBmaXJzdCBjb2x1bW4gaXMgdGhlIHktYXhpcyBzY29yZXMsIHNlY29uZCBjb2x1bW4gaXMgdGhlIHBsYWNlbWVudCBvZiB0aGUgYm94IHBsb3RzIGFuZCBzaG91bGQgdmFyeSBiZXR3ZWVuIDEsMSwwMSwyLDIuMDEgYmFzZWQgb24gd2hlcmUgdGhlIG1lYW5zIHNob3VsZCBiZSBkaXNwbGF5ZWQgYW5kIGNhbGxlZCB4X2F4aXMsIHRoaXJkIGNvbHVtbiBpcyBJZHMgYW5kIG5hbWVkIGlkLCBmb3VydGggY29sdW1uIGlzIHRoZSBncm91cCBsaWtlIGRydWcgZ3JvdXAsIDV0aCBjb2x1bW4gaXMgdGhlIGppdHRlciBhbmQgc2hvdWxkIGJlIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMSBhbmQgMgoKc2V0X3RoZW1lKAogIGJhc2UgPSB0aGVtZV9jbGFzc2ljKChiYXNlX3NpemUgPSAxOCkpLCAKICBsZWdlbmQudGl0bGUuZmFjZSA9ICJpdGFsaWMiLCAjIHRpdGxlIGZvbnQgZmFjZQogIGxlZ2VuZC5pbnNpZGUgPSBUUlVFLCAgICAgICAgICMgbGVnZW5kIGluc2lkZSBwbG90CiAgbGVnZW5kLmNvbG9yID0gImdyZXk1MCIsICAgICAgIyBsZWdlbmQgbGFiZWwgY29sb3IKICBsZWdlbmQucG9zID0gImJvdHRvbSByaWdodCIsICAjIGxlZ2VuZCBwb3NpdGlvbiBpbnNpZGUgcGxvdAogIHRpdGxlLnNpemUgPSA0LAogIHRpdGxlLmFsaWduID0gImNlbnRlciIsCiAgYXhpcy50aXRsZS5zaXplID0gMS4zLAogIGF4aXMudGV4dHNpemUgPSAxLjEsCiAgbGVnZW5kLnNpemUgPSAxLAogIGxlZ2VuZC50aXRsZS5zaXplID0gMiwKICBnZW9tLmxhYmVsLnNpemUgPSAzLCAKKQoKCnJhaW5jbG91ZF8yeDIgPC0gcmFpbmNsb3VkXzJ4Ml9yZXBtZXMoCiAgZGF0YSA9IHBsb3RfZGF0YSwKICBjb2xvcnMgPSAoYygnZG9kZ2VyYmx1ZScsICdkYXJrb3JhbmdlJywgJ2RvZGdlcmJsdWUnLCAnZGFya29yYW5nZScpKSwKICBmaWxscyA9IChjKCdkb2RnZXJibHVlJywgJ2RhcmtvcmFuZ2UnLCAnZG9kZ2VyYmx1ZScsICdkYXJrb3JhbmdlJykpLAogIGxpbmVfY29sb3IgPSAnZ3JheScsCiAgbGluZV9hbHBoYSA9IC4zLAogIHNpemUgPSAxLAogIGFscGhhID0gLjYsCiAgc3ByZWFkX3hfdGlja3MgPSBUUlVFKSArICBmYWNldF93cmFwKH5mY3RfcmV2KFB1dGFtZW5TcGxpdCkpICsKCnNjYWxlX3hfY29udGludW91cyhicmVha3M9YygxLDIpLCBsYWJlbHM9YygiUGxhY2VibyIsICJNUEgiKSwgbGltaXRzPWMoMCwgMykpICsKICB4bGFiKCJEcnVnIikgKyAKICB5bGFiKCJSZXNwb25zZSBEaXZlcmdlbmNlIikgCgpyYWluY2xvdWRfMngyIAoKZ2dzYXZlKCdkYXRhUkQudGlmZicsIHVuaXRzPSJpbiIsIHdpZHRoPTE1LCBoZWlnaHQ9NiwgZHBpPTMwMCwgY29tcHJlc3Npb24gPSAnbHp3JykKCgpgYGAKCmBgYHtyfQpkYXRhU2tpcHBlZFJBVCA8LSByZWFkLmNzdignfi9Ecm9wYm94L0RDQ04vQ3JlYXRpdml0eS9Ta2lwcGVkSXRlbXNSQVRfVXBkYXRlZC5jc3YnKQoKZGF0YVNraXBwZWQgPC0gbG1lcihTa2lwcGVkSXRlbXMgfiAxICsgU2Vzc2lvbiArICgxIHwgc3ViamVjdCksIGRhdGEgPSBkYXRhU2tpcHBlZFJBVCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KGRhdGFTa2lwcGVkKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgoKYGBgCgpgYGB7cn0KaW5zdGFsbC5wYWNrYWdlcygiUGVyZm9ybWFuY2VBbmFseXRpY3MiKQpsaWJyYXJ5KFBlcmZvcm1hbmNlQW5hbHl0aWNzKQoKbXl2YXJzIDwtIGMoIkNvbnZlcmdlbnRfUGFzdGEiLCAiRGl2ZXJnZW50X1Bhc3RhIiwgIkNvbl9EaXYiLCAiRGlmZmVyZW50RW5kIiwgIkFVVF9kaXZlcmdlbnQiLCAiQ29udmVyZ2VudF9SQVQiLCJBVVRfUkFUX2RpZmYiLCAiRGl2X0Nvbl9QYXN0YV9EaWYiLCJJUF9EaWYxIiwgIklQX0RpZjIiLCAiSVBfRGlmMyIsICJJUF9EaWY0IiwgIkRldmlhbmNlX0RpZjEiLCAiRGV2aWFuY2VfRGlmMiIsICJEZXZpYW5jZV9EaWYzIiwgIkRldmlhbmNlX0RpZjQiLCJSZWRvX0RpZjEiLCAiUmVkb19EaWYyIiwgIlJlZG9fRGlmMyIsICJSZWRvX0RpZjQiLCJJUF9Bdl9EaWYiLCJSZWRvX0F2X0RpZiIsIkRldmlhbmNlX0F2X0RpZiIpCgpvbmx5QXZzIDwtIGMoIkNvbnZlcmdlbnRfUGFzdGEiLCAiRGl2ZXJnZW50X1Bhc3RhIiwgIkNvbl9EaXYiLCAiRGlmZmVyZW50RW5kIiwgIkFVVF9kaXZlcmdlbnQiLCAiQ29udmVyZ2VudF9SQVQiLCJBVVRfUkFUX2RpZmYiLCAiRGl2X0Nvbl9QYXN0YV9EaWYiLCJJUF9Bdl9EaWYiLCJSZWRvX0F2X0RpZiIsIkRldmlhbmNlX0F2X0RpZiIpCgoKbmV3ZGF0YSA8LSBkYXRhX1BCT1tteXZhcnNdCkF2ZGF0YSA8LSBkYXRhX1BCT1tvbmx5QXZzXQoKCmNoYXJ0LkNvcnJlbGF0aW9uKG5ld0RldmlhbmNlZGF0YSwgaGlzdG9ncmFtID0gVFJVRSwgbWV0aG9kID0gInBlYXJzb24iKQpjaGFydC5Db3JyZWxhdGlvbihuZXdSZWRvZGF0YSwgaGlzdG9ncmFtID0gVFJVRSwgbWV0aG9kID0gInBlYXJzb24iKQpjaGFydC5Db3JyZWxhdGlvbihuZXdJUGRhdGEsIGhpc3RvZ3JhbSA9IFRSVUUsIG1ldGhvZCA9ICJwZWFyc29uIikKCgpsaWJyYXJ5KGNvcnJwbG90KQoKTSA9IGNvcihuZXdkYXRhLHVzZT0icGFpcndpc2UuY29tcGxldGUub2JzIikKdGVzdFJlcyA9IGNvci5tdGVzdChuZXdkYXRhLCBjb25mLmxldmVsID0gMC45NSkKY29ycnBsb3QoTSwgbWV0aG9kID0gJ251bWJlcicpICMgY29sb3JmdWwgbnVtYmVyCiMjIGxlYXZlIGJsYW5rIG9uIG5vbi1zaWduaWZpY2FudCBjb2VmZmljaWVudAojIyBhZGQgc2lnbmlmaWNhbnQgY29ycmVsYXRpb24gY29lZmZpY2llbnRzCmNvcnJwbG90KE0sIHAubWF0ID0gdGVzdFJlcyRwLCBtZXRob2QgPSAnY2lyY2xlJywgdHlwZSA9ICdsb3dlcicsIGluc2lnPSdibGFuaycsCiAgICAgICAgIGFkZENvZWYuY29sID0nYmxhY2snLCBudW1iZXIuY2V4ID0gMC44LCBkaWFnPUZBTFNFKQoKTSA9IGNvcihBdmRhdGEsdXNlPSJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKQp0ZXN0UmVzID0gY29yLm10ZXN0KEF2ZGF0YSwgY29uZi5sZXZlbCA9IDAuOTUpCmNvcnJwbG90KE0sIG1ldGhvZCA9ICdudW1iZXInKSAjIGNvbG9yZnVsIG51bWJlcgojIyBsZWF2ZSBibGFuayBvbiBub24tc2lnbmlmaWNhbnQgY29lZmZpY2llbnQKIyMgYWRkIHNpZ25pZmljYW50IGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50cwpjb3JycGxvdChNLCBwLm1hdCA9IHRlc3RSZXMkcCwgbWV0aG9kID0gJ2NpcmNsZScsIHR5cGUgPSAnbG93ZXInLCBpbnNpZz0nYmxhbmsnLAogICAgICAgICBhZGRDb2VmLmNvbCA9J2JsYWNrJywgbnVtYmVyLmNleCA9IDAuOCwgZGlhZz1GQUxTRSkKCmRhdGFfTVBIIDwtIGRwbHlyOjpmaWx0ZXIoZGF0YUFsbCwgRHJ1ZyAlaW4lIGMoIk1QSCIpKSAgCmRhdGFfTVBIIDwtIGRhdGFfTVBIW29yZGVyKGRhdGFfTVBIJElEKSxdCmRhdGFfU1VMIDwtIGRwbHlyOjpmaWx0ZXIoZGF0YUFsbCwgRHJ1ZyAlaW4lIGMoIlNVTCIpKQpkYXRhX1NVTCA8LSBkYXRhX1NVTFtvcmRlcihkYXRhX1NVTCRJRCksXQpkYXRhX1BCTyA8LSBkcGx5cjo6ZmlsdGVyKGRhdGFBbGwsIERydWcgJWluJSBjKCJQQk8iKSkKZGF0YV9QQk8gPC0gZGF0YV9QQk9bb3JkZXIoZGF0YV9QQk8kSUQpLF0KCgpkZl9Db3JyZWxhdGlvbnMgPC0gZGF0YS5mcmFtZShtYXRyaXgobmNvbCA9IDgsIG5yb3cgPSA5MykpCnggPC0gYygiSUQiLCAiTVBIX1BCT19SZWRvX0F2IiwgIk1QSF9QQk9fSVBfQXYiLCJNUEhfUEJPX0FVVF9kaXZlcmdlbnQiLCJNUEhfUEJPX0RpdmVyZ2VudF9QYXN0YSIsIk1QSF9QQk9fRGlmZmVyZW50RW5kIiwiTVBIX1BCT19Db252ZXJnZW50X1JBVCIsIk1QSF9QQk9fQ29udmVyZ2VudF9QQVNUQSIpCmNvbG5hbWVzKGRmX0NvcnJlbGF0aW9ucykgPC0geAoKZGZfQ29ycmVsYXRpb25zJElEIDwtIGRhdGFfTVBIJElECmRmX0NvcnJlbGF0aW9ucyRNUEhfUEJPX1JlZG9fQXYgPC0gZGF0YV9NUEgkUmVkb19Bdl9EaWYtZGF0YV9QQk8kUmVkb19Bdl9EaWYKZGZfQ29ycmVsYXRpb25zJE1QSF9QQk9fSVBfQXYgPC0gZGF0YV9NUEgkSVBfQXZfRGlmLWRhdGFfUEJPJElQX0F2X0RpZgpkZl9Db3JyZWxhdGlvbnMkTVBIX1BCT19BVVRfZGl2ZXJnZW50IDwtIGRhdGFfTVBIJEFVVF9kaXZlcmdlbnQtZGF0YV9QQk8kQVVUX2RpdmVyZ2VudApkZl9Db3JyZWxhdGlvbnMkTVBIX1BCT19EaXZlcmdlbnRfUGFzdGEgPC0gZGF0YV9NUEgkRGl2ZXJnZW50X1Bhc3RhLWRhdGFfUEJPJERpdmVyZ2VudF9QYXN0YQpkZl9Db3JyZWxhdGlvbnMkTVBIX1BCT19EaWZmZXJlbnRFbmQgPC0gZGF0YV9NUEgkRGlmZmVyZW50RW5kLWRhdGFfUEJPJERpZmZlcmVudEVuZApkZl9Db3JyZWxhdGlvbnMkTVBIX1BCT19Db252ZXJnZW50X1JBVCA8LSBkYXRhX01QSCRDb252ZXJnZW50X1JBVC1kYXRhX1BCTyRDb252ZXJnZW50X1JBVApkZl9Db3JyZWxhdGlvbnMkTVBIX1BCT19Db252ZXJnZW50X1BBU1RBIDwtIGRhdGFfTVBIJENvbnZlcmdlbnRfUGFzdGEtZGF0YV9QQk8kQ29udmVyZ2VudF9QYXN0YQoKCgpNID0gY29yKGRmX0NvcnJlbGF0aW9ucyx1c2U9InBhaXJ3aXNlLmNvbXBsZXRlLm9icyIpCnRlc3RSZXMgPSBjb3IubXRlc3QoZGZfQ29ycmVsYXRpb25zLCBjb25mLmxldmVsID0gMC45NSkKY29ycnBsb3QoTSwgbWV0aG9kID0gJ251bWJlcicpICMgY29sb3JmdWwgbnVtYmVyCiMjIGxlYXZlIGJsYW5rIG9uIG5vbi1zaWduaWZpY2FudCBjb2VmZmljaWVudAojIyBhZGQgc2lnbmlmaWNhbnQgY29ycmVsYXRpb24gY29lZmZpY2llbnRzCmNvcnJwbG90KE0sIHAubWF0ID0gdGVzdFJlcyRwLCBtZXRob2QgPSAnY2lyY2xlJywgdHlwZSA9ICdsb3dlcicsIGluc2lnPSdibGFuaycsCiAgICAgICAgIGFkZENvZWYuY29sID0nYmxhY2snLCBudW1iZXIuY2V4ID0gMC44LCBkaWFnPUZBTFNFKQoKCgpkZl9TVUxfY29yIDwtIGRhdGEuZnJhbWUobWF0cml4KG5jb2wgPSA4LCBucm93ID0gOTMpKQp4IDwtIGMoIklEIiwgIlNVTF9QQk9fUmVkb19BdiIsICJTVUxfUEJPX0lQX0F2IiwiU1VMX1BCT19BVVRfZGl2ZXJnZW50IiwiU1VMX1BCT19EaXZlcmdlbnRfUGFzdGEiLCJTVUxfUEJPX0RpZmZlcmVudEVuZCIsIlNVTF9QQk9fQ29udmVyZ2VudF9SQVQiLCJTVUxfUEJPX0NvbnZlcmdlbnRfUEFTVEEiKQpjb2xuYW1lcyhkZl9TVUxfY29yKSA8LSB4CgoKZGZfU1VMX2NvciRJRCA8LSBkYXRhX1NVTCRJRApkZl9TVUxfY29yJFNVTF9QQk9fUmVkb19BdiA8LSBkYXRhX1NVTCRSZWRvX0F2X0RpZi1kYXRhX1BCTyRSZWRvX0F2X0RpZgpkZl9TVUxfY29yJFNVTF9QQk9fSVBfQXYgPC0gZGF0YV9TVUwkSVBfQXZfRGlmLWRhdGFfUEJPJElQX0F2X0RpZgpkZl9TVUxfY29yJFNVTF9QQk9fQVVUX2RpdmVyZ2VudCA8LSBkYXRhX1NVTCRBVVRfZGl2ZXJnZW50LWRhdGFfUEJPJEFVVF9kaXZlcmdlbnQKZGZfU1VMX2NvciRTVUxfUEJPX0RpdmVyZ2VudF9QYXN0YSA8LSBkYXRhX1NVTCREaXZlcmdlbnRfUGFzdGEtZGF0YV9QQk8kRGl2ZXJnZW50X1Bhc3RhCmRmX1NVTF9jb3IkU1VMX1BCT19EaWZmZXJlbnRFbmQgPC0gZGF0YV9TVUwkRGlmZmVyZW50RW5kLWRhdGFfUEJPJERpZmZlcmVudEVuZApkZl9TVUxfY29yJFNVTF9QQk9fQ29udmVyZ2VudF9SQVQgPC0gZGF0YV9TVUwkQ29udmVyZ2VudF9SQVQtZGF0YV9QQk8kQ29udmVyZ2VudF9SQVQKZGZfU1VMX2NvciRTVUxfUEJPX0NvbnZlcmdlbnRfUEFTVEEgPC0gZGF0YV9TVUwkQ29udmVyZ2VudF9QYXN0YS1kYXRhX1BCTyRDb252ZXJnZW50X1Bhc3RhCgpNID0gY29yKGRmX1NVTF9jb3IsdXNlPSJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKQp0ZXN0UmVzID0gY29yLm10ZXN0KGRmX1NVTF9jb3IsIGNvbmYubGV2ZWwgPSAwLjk1KQpjb3JycGxvdChNLCBtZXRob2QgPSAnbnVtYmVyJykgIyBjb2xvcmZ1bCBudW1iZXIKIyMgbGVhdmUgYmxhbmsgb24gbm9uLXNpZ25pZmljYW50IGNvZWZmaWNpZW50CiMjIGFkZCBzaWduaWZpY2FudCBjb3JyZWxhdGlvbiBjb2VmZmljaWVudHMKY29ycnBsb3QoTSwgcC5tYXQgPSB0ZXN0UmVzJHAsIG1ldGhvZCA9ICdjaXJjbGUnLCB0eXBlID0gJ2xvd2VyJywgaW5zaWc9J2JsYW5rJywKICAgICAgICAgYWRkQ29lZi5jb2wgPSdibGFjaycsIG51bWJlci5jZXggPSAwLjgsIGRpYWc9RkFMU0UpCgoKYGBgCgpgYGB7cn0KIyBUb3RhbCBudW1iZXIgb2YgaWRlYXMgaW4gUEFTVEEKTVBIX0NhdWRhdGVfVG90YWwgPC0gbG1lcihUb3RhbCB+IDEgKyBEcnVnKkNhdWRhdGVfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCxSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfVG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCk1QSF9QdXRhbWVuX1RvdGFsIDwtIGxtZXIoVG90YWwgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9QdXRhbWVuX1RvdGFsKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpNUEhfVlNfVG90YWwgPC0gbG1lcihUb3RhbCB+IDEgKyBEcnVnKlZTX2tpICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfVlNfVG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCiMjIENvbnZlcmdlbnQgUEFTVEEgY29ycmVjdGVkIGZvciBUb3RhbCBudW1iZXIgb2YgaWRlYXMKTVBIX0NhdWRhdGVfQ29uVG90YWwgPC0gbG1lcihDb25fVG90YWwgfiAxICsgRHJ1ZypDYXVkYXRlX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9DYXVkYXRlX0NvblRvdGFsKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpNUEhfUHV0YW1lbl9Db25Ub3RhbCA8LSBsbWVyKENvbl9Ub3RhbCB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCxSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX1B1dGFtZW5fQ29uVG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCk1QSF9WU19Db25Ub3RhbCA8LSBsbWVyKENvbl9Ub3RhbCB+IDEgKyBEcnVnKlZTX2tpICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfVlNfQ29uVG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCiMjIERpdmVyZ2VudCBQQVNUQSBjb3JyZWN0ZWQgZm9yIFRvdGFsIG51bWJlciBvZiBpZGVhcwpNUEhfQ2F1ZGF0ZV9EaXZUb3RhbCA8LSBsbWVyKERpdl9Ub3RhbCB+IDEgKyBEcnVnKkNhdWRhdGVfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCxSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfRGl2VG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCk1QSF9QdXRhbWVuX0RpdlRvdGFsIDwtIGxtZXIoRGl2X1RvdGFsIH4gMSArIERydWcqUHV0YW1lbl9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9EaXZUb3RhbCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKTVBIX1ZTX0RpdlRvdGFsIDwtIGxtZXIoRGl2X1RvdGFsIH4gMSArIERydWcqVlNfa2kgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9WU19EaXZUb3RhbCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKIyMgRGlmZmVyZW50IGVuZGluZyBQQVNUQSBjb3JyZWN0ZWQgZm9yIFRvdGFsIG51bWJlciBvZiBpZGVhcwpNUEhfQ2F1ZGF0ZV9EaWZFbmRUb3RhbCA8LSBsbWVyKERpZkVuZF9Ub3RhbCB+IDEgKyBEcnVnKkNhdWRhdGVfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCxSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfRGlmRW5kVG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCk1QSF9QdXRhbWVuX0RpZkVuZFRvdGFsIDwtIGxtZXIoRGlmRW5kX1RvdGFsIH4gMSArIERydWcqUHV0YW1lbl9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9EaWZFbmRUb3RhbCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKTVBIX1ZTX0RpZkVuZFRvdGFsIDwtIGxtZXIoRGlmRW5kX1RvdGFsIH4gMSArIERydWcqVlNfa2kgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9WU19EaWZFbmRUb3RhbCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKYGBgCgpgYGB7cn0KCmRmX01QSF9Mb3dRIDwtIGRwbHlyOjpmaWx0ZXIoZGZfTVBILCBQdXRhbWVuUXVhcnRpbGUgJWluJSBjKCIxIikpICAKZGZfTVBIX0hpZ2hRIDwtIGRwbHlyOjpmaWx0ZXIoZGZfTVBILCBQdXRhbWVuUXVhcnRpbGUgJWluJSBjKCIyIikpICAKCk1QSF9QdXRhbWVuX1Bhc3REaWZfTG93USA8LSBsbWVyKERpZmZlcmVudEVuZCB+IDEgKyBEcnVnICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBIX0xvd1EsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9QYXN0RGlmX0xvd1EpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCk1QSF9QdXRhbWVuX1Bhc3REaWZfSGlRIDwtIGxtZXIoRGlmZmVyZW50RW5kIH4gMSArIERydWcgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEhfSGlnaFEsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9QYXN0RGlmX0hpUSksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKbGlicmFyeShCYXllc0ZhY3RvcikKCmxtMV9iaWMgPC0gQklDKE1QSF9QdXRhbWVuX1Bhc3REaWZfTG93USkgCk1QSF9QdXRhbWVuX1Bhc3REaWZfTG93UV9Ob0RydWcgPC0gbG1lcihEaWZmZXJlbnRFbmQgfiAxICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBIX0xvd1EsIFJFTUw9RikKCgpsbTJfYmljIDwtIEJJQyhNUEhfUHV0YW1lbl9QYXN0RGlmX0xvd1FfTm9EcnVnKSAKCmJpY19iZjEwIDwtIGZ1bmN0aW9uKG51bGwsIGFsdGVybmF0aXZlKSB7Cm5ld19iZiA8LSBleHAoKG51bGwgLSBhbHRlcm5hdGl2ZSkgLyAyKSAjIGNvbnZlcnQgQklDcyB0byBCYXllcyBmYWN0b3IKbmFtZXMobmV3X2JmKSA8LSBOVUxMICMgcmVtb3ZlIEJJQyBsYWJlbApyZXR1cm4obmV3X2JmKSAjIHJldHVybiBCYXllcyBmYWN0b3Igb2YgYWx0ZXJuYXRpdmUgb3ZlciBudWxsIGh5cG90aGVzaXMKfQoKYmljX2JmMTAobG0yX2JpYyxsbTFfYmljKSAjIGNvbnZlcnQgQklDcyB0byBCRgoKClNVTDEgPC0gbG1lcihEaWZmZXJlbnRFbmQgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUwxKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpTVUwyIDwtIGxtZXIoRGlmZmVyZW50RW5kIH4gMSArIERydWcgKyBQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUwyKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpTVUwzIDwtIGxtZXIoRGlmZmVyZW50RW5kIH4gMSArIFB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTDMpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKClNVTDFfYmljIDwtIEJJQyhTVUwxKSAKU1VMMl9iaWMgPC0gQklDKFNVTDIpIApTVUwzX2JpYyA8LSBCSUMoU1VMMykgCgpiaWNfYmYxMChTVUwyX2JpYyxTVUwxX2JpYykgIyBudWxsIGNvbWVzIGZpcnN0LCB0aGUgcmVzdWx0cyBhcmUgZm9yIHRoZSBudWxsCmJpY19iZjEwKFNVTDNfYmljLFNVTDFfYmljKSAjIGNvbnZlcnQgQklDcyB0byBCRgpiaWNfYmYxMChTVUwzX2JpYyxTVUwyX2JpYykgIyBjb252ZXJ0IEJJQ3MgdG8gQkYKCgpgYGAKCg==